# [JavaScript] let、const、var差別 [TOC] ## 作用域 (Scope) * var 函式作用域 (Function Scope),在函式內部定義的變數只能在該函式內使用,即使是區塊 {} 內聲明也無法區分作用域。 * let 區塊作用域 (Block Scope),限制在 {} 區塊內使用,外部無法訪問區塊內定義的變數。 * const 區塊作用域 (Block Scope),與 let 類似,變數僅限於 {} 區塊內有效。 ## 重複聲明 是否允許重複聲明 * var 允許,例如 var x = 1; var x = 2; 是有效的。 * let 不允許,同一作用域中重複聲明會導致錯誤。 * const 不允許,同一作用域中重複聲明會導致錯誤。 ## 初始值要求 是否需要初始值 * var 可不設初始值,未初始化時為 undefined。 * let 可不設初始值,未初始化時為 undefined。 * const 必須設置初始值,否則會導致錯誤。 ## 重新賦值 (Reassignment) 是否允許重新賦值 * var 允許重新賦值。 * let 允許重新賦值。 * const 不允許重新賦值,聲明後值不可更改 (對於物件類型,屬性可以改變,但不能改變整個引用)。 ## 變數提升 (Hoisting) 是否提升 (Hoisting) 初始化行為 * var 會提升到作用域頂部,但值為 undefined。 * let 會提升到作用域頂部,但在初始化前不可使用 (Temporal Dead Zone)。 * const 會提升到作用域頂部,但在初始化前不可使用 (Temporal Dead Zone)。 ## 使用建議 * let:用於需要修改的變數,適用於大多數情況。 * const:用於常量或不會重新賦值的變數,提倡優先使用,因為能提高程式的可預測性和穩定性。 * var:不建議使用,因為它的函式作用域和變數提升容易導致潛在的錯誤。 參考資料: [面试官:说说var、let、const之间的区别](https://vue3js.cn/interview/es6/var_let_const.html#%E4%B8%80%E3%80%81var) [【前端vue3】TypeScrip-变量声明let、const、var](https://blog.csdn.net/qq_33530840/article/details/140012448)