Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态调用作用域函数_Javascript - Fatal编程技术网

Javascript 动态调用作用域函数

Javascript 动态调用作用域函数,javascript,Javascript,在Javascript中,您可以创建并调用如下函数: function test_1(){ console.log(1); } window['test_1']() // --> 1 但是,我当前的代码的范围是: (function(){ function test_1(){ console.log(1); } window['test_1']() // --> not a function })(); …使任何创建的函数不绑定到窗口级别,而是绑定到特定的作用域

在Javascript中,您可以创建并调用如下函数:

function test_1(){ console.log(1); }
window['test_1']() // --> 1
但是,我当前的代码的范围是:

(function(){
    function test_1(){ console.log(1); }
    window['test_1']() // --> not a function 
})();
…使任何创建的函数不绑定到窗口级别,而是绑定到特定的作用域级别

如何在作用域内创建函数,然后动态*调用该函数?


*所谓动态,我的意思是我可以用一个变量动态地改变字符串,比如window['test\'+index]()

全局变量成为
window
对象的属性

非全局变量不会自动成为任何对象的属性

你不能这样做


考虑将函数显式地作为对象的属性

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

要从作用域内调用作用域函数,只需按名称调用(不要使用窗口):


要从作用域之外调用作用域函数,需要将其导出到调用作用域中:

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

scope.test_1();

window.test_1=function(){}
您的问题是由于全局作用域与局部作用域的关系。第二个代码片段中所示的作用域函数的全部要点是限制它们可用的作用域。如果您想让它们在全球范围内可用,就不要对它们进行范围界定。如果您不希望它们全局可用,只需从正确的范围访问它们。你要求的组合是不可能的,也没有真正的意义。谢谢大家,尽管我想澄清这不是范围界定的“错误”,但这是不可能的@epascarello是正确的,这是一个重复的问题,第二个问题有帮助-然而,我用所有的术语来搜索它,我自己找不到这个问题。作为回答,我将函数作为对象的一部分并引用它。谢谢我很惊讶你没有查副本你应该重读问题的最后两段。你的回答没有抓住要点。我的第二个示例允许动态查找,例如
scope['test_'+x]()
var scope = (function(){
    function test_1(){ console.log(1); }
    return {
        test_1: test_1
    };
})();

scope.test_1();