【问题标题】:how to use the es6 "let" keyword properly in a forloop如何在 for 循环中正确使用 es6“let”关键字
【发布时间】:2015-05-31 18:36:11
【问题描述】:

也许我只是不理解 es6 'let' 关键字。

问题:

为什么iterate(10) 只会迭代 4 次?为什么最终输出是 15?

function iterate(count){
  for(let i = 0; i < count; i++){
    i += i
    console.log('inside', i);
  }
  console.log('outside', i);
}
iterate(10);
//0
//inside 2
//inside 6
//inside 14
//outside 15

我应该如何在for 循环中使用let?我什么时候应该考虑使用let

【问题讨论】:

  • 你是如何使用 ES6 的?这可能只是您的转译器的一个错误。尤其是 i 在循环体之外确实有一个值(而不是抛出异常)确实使这看起来很假。

标签: javascript ecmascript-6 let


【解决方案1】:

为什么 iterate(10) 只迭代 4 次?

因为你自己增加了i,所以基本上每次迭代都乘以2:

i += i

let 无关。 var 的结果相同。

为什么最终输出是 15?

这实际上应该引发引用错误,因为i 在循环之外不可用。

【讨论】:

  • 它与let 有关 - 因为与let,这实际上不应该发生并且只修改本地块范围变量。
  • @Bergi 不,let 'ed 变量仍然可以在 for 块内修改,就像使用 var 一样。唯一的区别是 let console.log('outside', i); 会通过引用错误,因为 i 在外部不可用。
  • 糟糕,我已经纠正了,它只迭代了四次。 The scope semantics are just weird however。初始化和每个主体评估确实有自己的范围和变量的单独绑定(所以如果你稍后修改它,例如通过闭包,它们不会像 var 那样干扰),但是词法范围变量的值明确地传递到下一次迭代中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
相关资源
最近更新 更多