---
# System prepended metadata

title: '[JavaScript] let、const、var差別'
tags: [JavaScript]

---

# [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)