let 和 var 聲明變量的主要區(qū)別是作用域:let 聲明的變量僅在聲明所在塊級作用域內(nèi)可見,而 var 聲明的變量具有全局或函數(shù)作用域。此外,let 不允許重新聲明,但允許重新賦值;var 允許重新聲明和賦值。
let 與 var 的區(qū)別
let 和 var 是 JavaScript 中聲明變量的兩種關鍵字,它們在作用域、提升和重新聲明方面具有以下關鍵區(qū)別:
作用域
var: var 聲明的變量具有全局作用域或函數(shù)作用域,具體取決于聲明的位置。
let: let 聲明的變量僅在聲明所在的塊級作用域(花括號)內(nèi)可見。
提升
var: var 聲明的變量在執(zhí)行代碼之前會被提升到函數(shù)或全局作用域的頂部。
let: let 聲明的變量不會被提升,它們僅在聲明所在的作用域內(nèi)可用。
重新聲明
var: var 聲明的變量可以在同一作用域中重新聲明,并且會覆蓋先前的聲明。
let: let 聲明的變量不能在同一作用域中重新聲明,這會引發(fā)錯誤。
其他區(qū)別
除了上述主要區(qū)別外,let 和 var 還有以下其他區(qū)別:
重新賦值: let 聲明的變量可以重新賦值,而 var 聲明的變量可以重新賦值和重新聲明。
初始值: let 聲明的變量必須在聲明時初始化,而 var 聲明的變量可以不初始化,默認為 undefined。
示例
<code class="javascript">// 使用 var function example1() { var x = 10; if (true) { var x = 20; // 重新聲明和重新賦值 console.log(x); // 輸出: 20 } console.log(x); // 輸出: 20 } // 使用 let function example2() { let y = 10; if (true) { let y = 20; // 重新賦值 console.log(y); // 輸出: 20 } console.log(y); // 輸出: 10 }</code>
登錄后復制
如例所示,var 允許在同一作用域中重新聲明和重新賦值變量,而 let 僅允許重新賦值。