以下代码的输出为12 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?!?
答案 0 :(得分:4)
每个omg()
调用都会返回一个新函数。因此,omg()[0]()
调用会更改该特定实例的q
的本地值。我想如果你这样做了:
var a = omg()
a[0]();
a[1]();
你会得到预期的输出。
答案 1 :(得分:3)
每个omg()
都会生成一个单独的闭包,其中包含一个单独的space
对象。
要获得预期的行为,您需要拨打omg()
一次并使用相同的变量调用其中的两个函数:
var arr = omg();
arr[0]();
arr[1]();
答案 2 :(得分:1)
您执行omg()
两次,因此您可以使用单独的space
对象获得两个不同的闭包。