質問: "let"と "var"を使用することの違いは何ですか? ecmascript 6では let文が導入されました 。「ローカル」変数として記述されていると聞いたことがありますが、それがvarキーワードとは異なる動作をするかどうかはまだよくわかりません。違いは何ですか? letをvarの上でいつ使用すべきですか?
回答: 主な違いはscopeの違いですが、letのみ利用可能ですforループのように、scopeスコープ内で、varたとえば、ループの外側にアクセスします。 mdn のドキュメントから(例もmdnから): letを使用すると、スコープが使用されるブロック、ステートメント、または式に限定された変数を宣言できます。これは、varキーワードとは異なり、ブロックスコープに関係なく、関数全体に対して変数をグローバルに、またはローカルに定義します。 letで宣言された変数のスコープは、変数が定義されているブロックと、含まれているサブブロックにあります。このように、letはvarと非常によく似ています。主な違いは、var変数のスコープが囲み関数全体であることです: function vartest() { var x = 1; if (true) { var x = 2; // same variable! console.log(x); // 2 } console.log(x); // 2 } function lettest() { let x = 1; if (true) { let x = 2; // different variable console.log(x); // 2 } console.log(x); // 1 }` プログラムと関数の最上位レベルでは、let、varとは異なり、グローバルオブジェクトにプロパティを作成しません。例えば: var x = 'global'; let y = 'global'; console.log(this.x); // "global" console.log(this.y); // undefined ブロック内で使用する場合、変数のスコープをそのブロックに制限します。スコープが宣言されている関数内にあるvarの違いに注意してください。 var a = 1; var b = 2; if (a === 1) { var a = 11; // the scope is global let b = 22; // the scope is inside the if-block console.log(a); // 11 console.log(b); // 22 } console.log(a); // 11 console.log(b); // 2 また、ecma6機能であることも忘れないでください。まだ完全にはサポートされていないので、babelなどを使用してecma5にトランスパイルすることをお勧めします。.. babel website