48

編集:質問を読んでください!私はすでに違いを知っています。これは重複ではありません。

明らかに、今のところ、すべてでサポートされているわけではないので、常にvarキーワードを使用する必要があります。let

let キーワードのサポートが向上した場合 (たとえば、数年後に Harmony を使用する Node アプリケーションを作成している場合)、いつletキーワードとキーワードを使用する必要がありvarますか?

私は違いを理解しています — <code>var は関数のスコープ用であり、 はブロックのスコープ用です — しかし、「常にキーワードを使用する」または「関数の先頭にあるキーワードを使用するが、ブロック内の let キーワードを使用letする」のようなものを探していますforループのように」。letvar

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 に答える