为什么设置超时内的curr值固定为3

时间:2017-10-24 09:44:52

标签: javascript closures settimeout



function printFruits(fruits) {

  for (var i = 0; i < fruits.length; i++) {

    var curr = i;

    console.log(curr);

    setTimeout(function() {

      console.log(curr);

      console.log(fruits[curr]);

    }, i * 1000);

  }

}

printFruits(["Lemon", "Orange", "Mango", "Banana"]);
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

curr的值将是调用时的值,到那时curr的值已经达到 3

您需要锁定函数中的值

(function(curr){setTimeout(function() {
  //console.log(curr);
  console.log(fruits[curr]);
}, i * 1000)})(curr);

<强>演示

function printFruits(fruits) 
{
  for (var i = 0; i < fruits.length; i++) 
  {
    var curr = i;
    //console.log(curr);
    (function(curr){setTimeout(function() {
      //console.log(curr);
      console.log(fruits[curr]);
    }, i * 1000)})(curr);
  }
}

printFruits(["Lemon", "Orange", "Mango", "Banana"]);