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

时间:2012-02-17 20:53:21

标签: javascript jquery

我有这段代码:

(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的内部测试函数?

由于

5 个答案:

答案 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));

DEMO

答案 4 :(得分:0)

正如其他成员所说,如果它在匿名函数之外,则可以调用test函数。这是必要的,因为在匿名函数中定义test函数限制了test函数的范围。另外,jquery是javascript的一个很棒的框架,但毕竟它是{{1所以有效的javascript snipplet wud与jquery一起工作,反之亦然