我有这个代码:
(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的内部测试函数?
感谢
test
仅在其周围的匿名函数中定义。
在大多数情况下,函数定义应该始终位于任何匿名函数之外。当然也有例外,但这些只适用于那些确切知道自己在做什么的人。
如果要在匿名函数之外使用test
,则必须将其导出到全局作用域。这可以通过以下方式实现:
(function ($) {
// ...
function test(somevar1, somevar2) {
alert(somevar1+ "" + somevar2);
}
window.test = test; // <-- This
}(jQuery));
与将函数声明移动到匿名函数之外相比,此方法的最大优点是test
仍然可以使用局部变量,这些变量只能从匿名函数内部访问。
看看这在onready函数之外,然后你就可以使用它了。
function test(somevar1, somevar2)
{
alert(somevar1+ "" + somevar2);
}
(function ($) {
$(document).ready(function() {
test("hola","caracola");
});
}(jQuery));
正如其他成员所说,如果test
函数在匿名函数之外,则可以调用它。这是必要的,因为在匿名函数中定义test
函数限制了test
函数的范围。此外,jquery是javascript的一个很棒的框架,但毕竟它有javascript
,所以一个有效的javascript
snipplet-wud可以与jquery一起工作,反之亦然
您可以使用apply调用函数,也就是从被调用者调用测试
(function ($) {
$(document).ready(function() {
test.apply(this,["hola","caracola"]);
});
function test(somevar1, somevar2)
{
alert(somevar1+ "" + somevar2);
}
}(jQuery));
DEMO