可以“;外部“;javascript函数调用“;jQuery函数”;

Can "external" javascript functions call "jQuery functions"?

本文关键字:函数 jQuery javascript 外部 可以 函数调用      更新时间:2023-09-26

我有这个代码:

(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