Javascript闭包 - 理解循环

时间:2016-05-13 19:18:07

标签: javascript for-loop

for (var i = 0; i < 5; i++) {
  var btn = document.createElement('button');
  btn.appendChild(document.createTextNode('Button ' + i));
  btn.addEventListener('click', function(){ console.log(i); });
  document.body.appendChild(btn);
}

在上面的代码中 - 无论按下什么按钮,输出总是5,因为我在js中理解它是通过referene,当循环完成时,最终值将更新为'i' - 但是1我有的问题是为什么5 - 我认为它是4 - 一旦i的值为4,它不应该从循环出来吗?我是否因为'for'循环而错过了一些理解?

1 个答案:

答案 0 :(得分:0)

你的问题不是关闭,而是关于循环,对吧?闭包是一个不同的故事,但循环是直截了当的 - 它在检查它是否通过条件之前执行增量步骤:

订单是:

  • i初始化为0
  • _
  • 检查i < 5(是)
  • 执行身体
  • i增加到1
  • _
  • 检查i < 5(是)
  • 执行身体
  • i增加到2
  • _
  • 检查i < 5(是)
  • 执行身体
  • i增加到3
  • _
  • 检查i < 5(是)
  • 执行身体
  • i增加到4
  • _
  • 检查i < 5(是)
  • 执行身体
  • i增加到5
  • _
  • 检查i < 5(不是)
  • 结束循环