2012-02-17 130 views
0

我有這樣的代碼:「外部」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的內部測試功能?

由於

+3

您將不得不在匿名函數外定義'test'。 – 2012-02-17 20:55:02

+1

您可以在jQuery加載函數之外定義'test()',並從內部使用它。 – Brad 2012-02-17 20:55:58

回答

1

如果您想在匿名函數之外使用它,您必須將test導出到全局範圍。可在部份的方式進行:

(function ($) { 
    // ... 
    function test(somevar1, somevar2) { 
     alert(somevar1+ "" + somevar2); 
    } 
    window.test = test; // <-- This 
}(jQuery)); 

這種方法比移動的匿名函數外部函數聲明的一大優勢是,test仍然可以使用局部變量,這是從匿名函數內只訪問。

2

test僅在其周圍纏繞的匿名函數定義。

大多數情況下,函數定義應始終在任何匿名函數之外。當然也有例外,但那些只適用於那些確切知道他們在關閉中做什麼的人。

0

看看這是超出了onready函數,然後你可以使用它。

function test(somevar1, somevar2) 
{ 
    alert(somevar1+ "" + somevar2); 
} 

(function ($) { 

    $(document).ready(function() { 
     test("hola","caracola"); 
    }); 

}(jQuery)); 
0

您可以使用應用調用的函數,也就是從被叫通話測試

(function ($) { 

    $(document).ready(function() { 
     test.apply(this,["hola","caracola"]); 
    }); 

    function test(somevar1, somevar2) 
    { 
     alert(somevar1+ "" + somevar2); 
    } 

}(jQuery)); 

DEMO

0

正如其他成員說的清楚,如果它是test函數可以調用在匿名函數之外。這是必要的堂妹通過定義匿名函數內部test功能限制test功能。而且的範圍,jQuery是JavaScript的一個真棒framwork,但畢竟其javascript所以NE有效javascript snipplet WUD與jQuery,反之亦然

工作