LETとconstによって宣言された変数は、コードブロック内でのみ有効です。
{let a = 10; var b = 1;} a //参照エラー:aは定義されていません。b// 1変数プロモーションはありません
宣言後に変数を使用する必要があります。そうしないと、エラーが報告されます。
var tmp = 123; if(true){tmp = 'abc'; //参照エラーレットtmp;}繰り返しのステートメントは許可されていません
//エラーfunction(){let a = 10; var a = 1;}ブロックレベルの範囲
function f(){console.log( '私は外側!'); }(function(){if(false){//関数f(){console.log( 'i in inside!');}} f();}()); //私は中にいます! ES5機能プロモーション//私は外にいます! ES6ブロックレベルのスコープconstコマンド
読み取り専用定数を宣言します。宣言されると、定数の値を変更することはできません。
変数が宣言されたら、すぐに初期化する必要があり、後で割り当てることはできません。
Let Command、Const Command、およびClassコマンドによって宣言されたグローバル変数は、グローバルオブジェクトのプロパティに属していません。
var a = 1; //ノードのREPL環境では、Global.a //として記述できます。
次に、ES6のconstコマンドを別々に紹介します
常にECMAに集中してきたJSは、定数の概念を持っていなかったため、ES6はこの欠陥を補っています。
const foo = 'foo'; foo = 'bar'; // typeerror:定数変数への割り当て。
上記の例は、基本タイプの定数を宣言しています。初期値を変更しようとすると、エラーが報告されます。それが参照タイプの値である場合、それも適用されますが、1つのことに注意を払う必要があります。例を挙げてください。
const foo = []; foo = [1]; //定数変数への割り当て。
通常のエラー、問題ありません、もう一度見てください:
const foo = [1,2,3]; foo [1] = 4; console.log(foo)// [1、4、3]
なぜこれにエラーがないのですか?そして、それは正常に変更できますか?これらの2つの例の違いは、前者がポインターの対応するコンテンツを変更し(JS参照タイプに精通する必要がある)、後者はまだポインティングを変更していないことですが、ポインティングオブジェクトのコンテンツが変更されました。 Fooにとって、私は単なる対応するオブジェクトを指す責任を負います。オブジェクトコンテンツについては、自分のビジネスを気にしないので、変更できます。コンテンツを変更したくない場合は、別の方法を使用できます。
const foo = object.freeze([1,2,3]); foo [1] = 4; console.log(foo)// [1、2、3]
これにより、変更されることを心配する必要はありません。