2017-04-24 85 views
0

在JavaScript中,您可以創建和調用一個函數這樣:呼叫動態作用域功能

function test_1(){ console.log(1); } 
window['test_1']() // --> 1 

但是,我當前的代碼的作用範圍:

(function(){ 
    function test_1(){ console.log(1); } 
    window['test_1']() // --> not a function 
})(); 

...作任何創建功能不受窗口級限制,而是限於特定的範圍級別。

如何在範圍內創建函數,然後動態調用該函數?

*通過動態我的意思是我可以動態地改變與一可變的字符串,如窗口[「測試_」 +指數]()

+1

'window.test_1 =函數(){}' – Rayon

+0

你的問題是監守的全球VS本地範圍。 – epascarello

+0

您的第二個代碼片段中顯示的範圍函數的全部要點是限制它們的可用範圍。如果你想讓它們成爲全球可用的,就不要限制它們的範圍。如果您不想讓它們全球可用,只需從正確的範圍訪問它們即可。你所要求的組合是不可能的,並且沒有意義。 – ArneHugo

回答

1

全局變量成爲window對象的屬性。

非全局變量不會自動成爲任何對象的屬性。

你不能這樣做。


請考慮明確地將函數作爲對象的屬性。

(function(){ 
    var functions = {}; 
    functions.test_1 = function test_1(){ console.log(1); }; 
    functions['test_1'](); 
})(); 
+3

我很驚訝,你沒有看起來愚蠢 – epascarello

-1

從您剛纔的名字稱呼它的範圍內調用範圍的功能(不使用窗口):

(function(){ 
    function test_1(){ console.log(1); } 
    test_1(); 
})(); 

要從範圍之外調用範圍的功能,你需要將其導出進入呼叫範圍:

var scope = (function(){ 
    function test_1(){ console.log(1); } 
    return { 
     test_1: test_1 
    }; 
})(); 

scope.test_1(); 
+0

你應該重讀這個問題的最後兩段。你的答案忽略了這一點。 – Quentin

+0

我的第二個例子允許動態查找,例如'範圍[ '測試_' + X]();' –