JavaScript理解某些闭包行为
以下代码的输出为12JavaScript理解某些闭包行为,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(
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:它返回一个新数组,其中包含命名两个新函数的元素(属性)(在创建它们的词法范围内“关闭”空间)。。。