我有这段代码:
(function ($) {
$(document).ready(function() {
test("hola","caracola");
});
function test(somevar1, somevar2)
{
alert(somevar1+ "" + somevar2);
}
}(jQuery));
function atest2(somevar1, somevar2)
{
test(somevar1+ "" + somevar2);
}
执行test2函数时,结果为:
ReferenceError: test is not defined
我的问题是:
如何调用test2来正确执行jQuery的内部测试函数?
由于
答案 0 :(得分:2)
test
仅在包围它的匿名函数中定义。
在大多数情况下,函数定义应始终位于任何匿名函数之外。当然有例外,但那些只适用于那些确切知道他们正在做什么关闭的人。
答案 1 :(得分:1)
如果要在匿名函数之外使用它,则必须将test
导出到全局范围。这可以通过以下方式完成:
(function ($) {
// ...
function test(somevar1, somevar2) {
alert(somevar1+ "" + somevar2);
}
window.test = test; // <-- This
}(jQuery));
此方法相对于在匿名函数之外移动函数声明的一大优点是test
仍然可以使用局部变量,这些变量只能在匿名函数中访问。
答案 2 :(得分:0)
看看这是在onready功能之外,然后你可以使用它。
function test(somevar1, somevar2)
{
alert(somevar1+ "" + somevar2);
}
(function ($) {
$(document).ready(function() {
test("hola","caracola");
});
}(jQuery));
答案 3 :(得分:0)
您可以使用apply调用该函数,即从被调用者调用test
(function ($) {
$(document).ready(function() {
test.apply(this,["hola","caracola"]);
});
function test(somevar1, somevar2)
{
alert(somevar1+ "" + somevar2);
}
}(jQuery));
答案 4 :(得分:0)
正如其他成员所说,如果它在匿名函数之外,则可以调用test
函数。这是必要的,因为在匿名函数中定义test
函数限制了test
函数的范围。另外,jquery是javascript的一个很棒的框架,但毕竟它是{{1所以有效的javascript
snipplet wud与jquery一起工作,反之亦然