文法
variable1 = value1とします
パラメーター
変数1
宣言する変数の名前。
値1
変数に割り当てられた初期値。
述べる
LETステートメントを使用して、スコープがそれを宣言するブロックに制限されている変数を宣言します。変数を宣言するときに変数に値を割り当てることも、スクリプトの後半で変数に値を割り当てることもできます。
letを使用して宣言された変数は、宣言の前に使用できません。そうしないと、エラーが発生します。
LETステートメントで変数が初期化されていない場合、JavaScript値が定義されていないJavaScript値が自動的に割り当てられます。
例:
var l = 10; {let l = 2; //この時点で、l = 2。} //ブロックレベルの範囲
for(var i = 0; i <10; i ++){} console.log(i); // 10for(let j = 0; j <10; j ++){} console.log(j); // "参照エラー:jは定義されていません変数プロモーションはありません
console.log(a); // output undefinedconsole.log(b); // referentionerrorconsole.log(c)をエラー// referentionerrorvar a = 2; let b = 2;
未定義と参照エラーの違いに注意してください
一時的なデッドゾーン(TDZ)
現在のブロックレベルのスコープを入力する限り、使用される変数はすでに存在しますが、宣言の前にデッドゾーンであり、操作できません。
注:TypeOFは、100%安全な操作ではなくなりました
typeof x; // referenceErrortypeof y // undefinedlet x;
繰り返しのステートメントは許可されていません
x = 1; let x; // "syntaxerror:識別子 'x'はすでに宣言されていますy = 2; var y = 3; // y = 3
ブロックレベルの範囲
//匿名関数writing(function(){var tmp = ...; ...}()); // block-level scope writing {let tmp = ...; ...}ES5の厳密なモードでは、関数はトップレベルのスコープと関数内でのみ宣言できることを規定しており、他の状況(コードブロック、ループコードブロックなど)の宣言がエラーを報告することを規定しています。
// es5'use strict '; if(true){function f(){} //エラーを報告}ES6はブロックレベルの範囲を導入するため、この状況はブロックレベルのスコープ内で宣言された関数として理解できます。したがって、エラーは報告されませんが、ブロックを構成するブレースに欠落はありません。
//エラー「Strict 'を使用」; if(true)function f(){}を報告する宣言されたグローバル変数はもはやウィンドウのプロパティではありません
「Strictを使用」; var a = 1; console.log(window.a)// 1let b = 1; console.log(window.b)// undefined