输出异常..为什么?

时间:2016-11-26 06:51:21

标签: javascript

我有很多天不能运行这个脚本!



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

1 个答案:

答案 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();