web-dev-qa-db-ja.com

letとvarはいつ使用する必要がありますか?

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

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

Letキーワードのサポートが優れている場合(たとえば、Harmonyを使用するNodeアプリケーションを数年後に作成しています)、letキーワードとvs varキーワード?

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

38
callumacrae

原則として、不都合がなければletを使うべきだと思います。といった:

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

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

このアプローチの利点は次のとおりです。

  1. 何か他のグローバル変数の使用をオーバーライドするリスクが少ない
  2. 変数が無関係になった後も長時間メモリにとどまることによるメモリリークのリスクが少ない
27
neelsg

letを使用を一般的なルールとして使用し、場合によってはvarを使用します。

ブロックスコープは標準で最も読みやすい選択肢であり、デバッグを容易にします。ブロックスコープを使用すると、変数のスコープ内の正確な場所を簡単に確認できます。関数のスコープ指定は、物事をはるかに目立たなくし、スコープ指定の間違いを含むバグを誤って導入しやすくします。

一般に、使用できるスコープが小さいほど優れています。したがって、letvarを超えます。

特に、変数をクローズするという無限の問題に対処し、クロージャーが実行される前に変数の値が変化することを認識しないようにします。

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);
}
13
Phil H