Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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_Node.js_Closures - Fatal编程技术网

JavaScript理解某些闭包行为

JavaScript理解某些闭包行为,javascript,node.js,closures,Javascript,Node.js,Closures,以下代码的输出为12 var omg = function(){ var space = {q:12} ; var sq = []; sq[0] = function(){ console.log(space.q); space.q = 14; }; sq[1] = function(){ console.log(

以下代码的输出为12

var omg = function(){

        var space = {q:12} ;

        var sq = [];

        sq[0] = function(){
                console.log(space.q);
                space.q = 14;
        };

        sq[1] = function(){
                console.log(space.q);
        };



        return sq;

};

omg()[0]();
omg()[1]();
~                           
为什么输出不是12 14

每个
omg()
使用单独的
空间
对象生成单独的闭包

要获得预期的行为,需要调用一次
omg()
,并使用相同的变量调用其中的两个函数:

var arr = omg();
arr[0]();
arr[1]();
每个
omg()
调用都返回一个新函数。因此,
omg()[0]()
调用更改该特定实例的
q
的本地值。我想如果你这样做:

var a = omg()
a[0](); 
a[1](); 

您将获得预期的输出。

执行两次
omg()
,因此您将得到两个不同的闭包,分别包含
空间
对象。

Nit:它返回一个新数组,其中包含命名两个新函数的元素(属性)(在创建它们的词法范围内“关闭”
空间
)。。。