JavaScript で let、const、var の実際の使い方を理解して使用していた時期がありましたが、それを言葉で説明するのは困難でした。同様の苦境に陥った場合に注目すべき重要な点は、スコープ、ホイスティング、再初期化、再割り当ての違いです。
スコープ:
function varExample() { if (true) { var x = 10; // x is function-scoped } console.log(x); // Outputs: 10 } varExample(); if (true) { var y = 20; // y is globally scoped because it's outside a function } console.log(y); // Outputs: 20
function letExample() { if (true) { let x = 10; // x is block-scoped console.log(x); // Outputs: 10 } console.log(x); // ReferenceError: x is not defined } letExample(); if (true) { let y = 20; // y is block-scoped console.log(y); // Outputs: 20 } console.log(y); // ReferenceError: y is not defined
function constExample() { if (true) { const x = 10; // x is block-scoped console.log(x); // Outputs: 10 } console.log(x); // ReferenceError: x is not defined } constExample(); if (true) { const y = 20; // y is block-scoped console.log(y); // Outputs: 20 } console.log(y); // ReferenceError: y is not defined
ホイスト
ホイスティングは、タスクを開始する前にワークスペースをセットアップするようなものです。あなたがキッチンで食事を作る準備をしていると想像してください。料理を始める前に、すべての食材と道具をカウンターの上に置き、手の届くところに置きます。
プログラミングでは、コードを記述するとき、JavaScript エンジンはコードを実際に実行する前にコードを調べ、スコープの先頭にすべての変数と関数を設定します。これは、コード内で宣言する前に関数や変数を使用できることを意味します。
3 つ (var、let、const) はすべて実際にホイストされます。ただし、違いは、ホイスティングプロセス中に初期化される方法にあります。
var はホイストされ、unknown で初期化されます。
console.log(myVar); // Outputs: undefined var myVar = 10;
console.log(myLet); // ReferenceError: Cannot access 'myLet' before initialization let myLet = 10;
console.log(myConst); // ReferenceError: Cannot access 'myConst' before initialization const myConst = 20;
再割り当てと再初期化:
var x = 10; x = 20; // Reassignment console.log(x); // Outputs: 20 var x = 30; // Reinitialization console.log(x); // Outputs: 30
let y = 10; y = 20; // Reassignment console.log(y); // Outputs: 20 let y = 30; // SyntaxError: Identifier 'y' has already been declared
const z = 10; z = 20; // TypeError: Assignment to constant variable. const z = 30; // SyntaxError: Identifier 'z' has already been declared
const obj = { a: 1 }; obj.a = 2; // Allowed, modifies the property console.log(obj.a); // Outputs: 2 obj = { a: 3 }; // TypeError: Assignment to constant variable.
const arr = [1, 2, 3]; arr[0] = 4; // Allowed, modifies the element console.log(arr); // Outputs: [4, 2, 3] arr = [5, 6, 7]; // TypeError: Assignment to constant variable.
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3