ES6 中的 let
是用于聲明變量的關(guān)鍵字,它相對(duì)于 ES5 中的 var
具有一些特殊的行為蕊蝗。
-
塊級(jí)作用域: 使用
let
聲明的變量具有塊級(jí)作用域仅乓,而不是函數(shù)級(jí)作用域。這意味著在使用let
聲明的變量?jī)H在包含它的塊(一對(duì)花括號(hào){}
)中可見蓬戚,而不是整個(gè)函數(shù)夸楣。這有助于減少變量的污染和提高代碼的可讀性。function example() { if (true) { let x = 10; console.log(x); // 10 } console.log(x); // ReferenceError: x is not defined }
-
變量提升: 使用
let
聲明的變量不會(huì)像var
那樣發(fā)生變量提升子漩。變量提升是指在代碼執(zhí)行前將變量聲明提升到作用域的頂部豫喧。使用let
聲明的變量在聲明之前是不可訪問的。console.log(y); // ReferenceError: y is not defined let y = 20;
-
不能重復(fù)聲明: 在同一作用域內(nèi)幢泼,使用
let
聲明的變量不能被重復(fù)聲明紧显,而var
允許在同一作用域內(nèi)多次聲明相同的變量。let z = 30; let z = 40; // SyntaxError: Identifier 'z' has already been declared
總體而言缕棵,let
提供了更加靈活和安全的變量聲明方式孵班,避免了一些由于變量提升和作用域?qū)е碌膯栴}。它通常是推薦在現(xiàn)代 JavaScript 中使用的變量聲明關(guān)鍵字之一招驴。
在ES6中篙程,除了let
關(guān)鍵字外,還引入了const
關(guān)鍵字用于聲明常量别厘。const
聲明的變量具有以下特性:
-
不可重新賦值: 一旦用
const
聲明變量并賦值虱饿,就不能再對(duì)其進(jìn)行重新賦值。這使得const
適用于聲明不變的常量。const PI = 3.14159; PI = 3; // TypeError: Assignment to constant variable.
-
塊級(jí)作用域: 類似于
let
氮发,const
聲明的變量也具有塊級(jí)作用域渴肉,只在聲明的塊內(nèi)可見。if (true) { const name = "John"; console.log(name); // "John" } console.log(name); // ReferenceError: name is not defined
-
不變性(Immutability): 當(dāng)
const
用于聲明復(fù)合類型(如對(duì)象或數(shù)組)時(shí)折柠,變量本身不可重新賦值宾娜,但其屬性或元素可以修改批狐。這是因?yàn)?code>const確保變量引用不變扇售,但并不凍結(jié)其內(nèi)容。const person = { name: "Alice" }; person.name = "Bob"; // 可行 person.age = 30; // 可行
注意:如果嘗試重新賦值
person
嚣艇,將會(huì)得到錯(cuò)誤承冰。person = { name: "Charlie" }; // TypeError: Assignment to constant variable.
總體而言,const
用于聲明不可變的常量食零,提高了代碼的可讀性和可維護(hù)性困乒。它適合用于那些在程序執(zhí)行過程中不應(yīng)該被修改的值。