我有很多天不能运行这个脚本!
var b = [9,8,7,6,5,4,3,2,1];
var a = (function(){
var W = [];
for(var k in b){
W[W.length] = {
index : k,
fx : function(){
console.log(k);
}
}
}
return W;
})();
console.log(a);
for(var j = 0; a[j]; j++)a[j].fx();

因为它不产生OUTPUT数字序列 987654321 ?
答案 0 :(得分:3)
您创建的每个函数fx
都引用变量var k
。它们不会保存k
的当前值,只会保存k
的引用。这意味着当您运行函数时,在for循环结束后,k
的值现在为8
,并且它们都打印出来。
一旦避免这种情况,并为每个函数赋予其自己的变量/值,就是将var k
更改为let k
(自ECMAScript 6起可用)。请参阅let
at MDN。
var b = [9,8,7,6,5,4,3,2,1];
var a = (function(){
var W = [];
for (let k in b) {
W[W.length] = {
index : k,
fx : function(){
console.log(k);
}
}
}
return W;
})();
for(var j = 0; a[j]; j++)
a[j].fx();