关于JavaScript的闭包有点困惑

时间:2014-07-16 20:01:16

标签: javascript closures

我从How do JavaScript closures work?

中获取了一些代码

我理解封闭是如何工作的:

function foo(x) {
  var tmp = 3;
  function bar(y) {
    alert(x + y + (++tmp)); // will alert 16
  }
  bar(10);
}
foo(2);

这将始终警告16,因为bar可以访问被定义为foo的参数的x,并且它还可以从foo访问tmp。

我不明白它是如何运作的:

function createArray(array){
    var outPut = [];
    for (var i = 0; i<array.length; i++){
        var inPut = array[i];
        outPut.push( function() {alert(inPut + " " + array[i])} ); 
    }
    return outPut;
}

function tryArray(){
    var finishedArray = createArray([1, 2, 3, 4]);    
    for (var i = 0; i < finishedArray.length; i++) {
        finishedArray[i]();
    }

}

tryArray();

它会记录4 undifined四次。

我期望发生的是记录。 1 1 2 2 3 3 4 4

为什么没有发生这种情况?

0 个答案:

没有答案