我什么时候应该使用let和var?

时间:2014-02-20 11:17:55

标签: javascript variables ecmascript-harmony ecmascript-6

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

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

当let关键字有更好的支持时(比方说,我在几年内使用Harmony编写Node应用程序),我应该何时使用let关键字与var关键字?

我理解差异 - var用于函数作用域,而let用于块作用域 - 但我正在寻找类似“始终使用let关键字”或“使用”的内容函数顶部的var关键字,但是for循环中的let关键字“。

3 个答案:

答案 0 :(得分:27)

我会说,作为一项原则,您应该在不方便的情况下使用let。如:

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

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

这种方法的优点是:

  1. 使用其他内容覆盖某些全局变量使用的风险较小
  2. 由于变量在变得无关紧要后长时间停留在内存中而导致内存泄漏的风险降低

答案 1 :(得分:13)

使用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);
}

答案 2 :(得分:-6)

如果需要函数作用域,那么答案很简单:[{1}}如果需要块作用域,则使用var