48

编辑:请阅读问题!我已经知道区别了。这不是重复的。

显然,现在我应该始终使用var关键字,因为let并非所有内容都支持。

当 let 关键字有更好的支持时(比如说,我在几年内编写了一个使用 Harmony 的 Node 应用程序),我应该什么时候使用let关键字与var关键字?

我理解其中的区别——<code>var 用于函数范围,而let用于块范围——但我正在寻找类似“始终使用let关键字”或“var在函数顶部使用关键字,但在块中使用 let 关键字”之类的东西像 for 循环”。

4

3 回答 3

36

我想说,原则上你应该let在不方便的时候使用。如:

for (let i = 0; i < 100; i++) {
    // Do something
}

if (condition) {
    let msg = a + b + c;
    console.log(msg);
    alert(msg);
}

这种方法的优点是:

  1. 覆盖某些全局变量用于其他用途的风险较小
  2. 由于变量在变得无关紧要后长时间保留在内存中,内存泄漏的风险降低
于 2014-02-20T11:56:24.170 回答
16

使用 let作为一般规则,偶尔使用 var。

块作用域是标准的和最易读的选择,它将使调试更容易。块作用域可以很容易地看到变量在作用域中的确切位置。函数作用域使事情变得不那么明显,并且更容易意外引入具有作用域错误的错误。

一般来说,您可以使用的范围越小越好。至此let结束var

特别是,它有助于解决关闭变量的无穷无尽的问题,并且在执行闭包之前没有意识到它们的值会发生变化:

for (var i = 1; i <= 5; i++) {
  var item = document.createElement("LI");
  item.appendChild(document.createTextNode("Item " + i));

  let j = i;
  item.onclick = function (ev) {
    alert("Item " + j + " is clicked.");
  };
  list.appendChild(item);
}
于 2014-02-20T15:09:39.867 回答
-5

var如果你需要函数作用域和let块作用域,答案很简单。

于 2014-02-20T11:18:59.880 回答