2017-04-24 73 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]();' –