let和const的區別?
一、let和const的區別
Let
let現在已經成為變量聲明的優選。這并不奇怪,因為它是對var聲明的改進。它也解決了我們剛剛介紹的var問題。讓我們考慮一下為什么會這樣。
let 是塊級作用域,塊是由 {} 界定的代碼塊,大括號中有一個塊。大括號內的任何內容都包含在一個塊級作用域中。
因此,在帶有let的塊中聲明的變量僅可在該塊中使用。
let greeting = ‘say Hi’;
let times = 4;
if (times > 3) {
let hello = ‘say Hello instead’;
console.log(hello); // say Hello instead”
}
console.log(hello); // hello is not defined
我們看到在其代碼塊(定義它的花括號)之外使用hello會返回錯誤。這是因為let變量是塊范圍的.
let 可以被修改但是不能被重新聲明,就像var一樣,用let聲明的變量可以在其范圍內被修改。但與var不同的是,let變量無法在其作用域內被重新聲明。
Const
用const聲明的變量保持常量值。 const聲明與let聲明有一些相似之處
const 聲明的變量在塊級作用域內,像let聲明一樣,const聲明只能在聲明它們的塊級作用域中訪問
const 不能被修改并且不能被重新聲明,這意味著用const聲明的變量的值保持不變。不能修改或重新聲明。因此,如果我們使用const聲明變量,那么我們將無法做到這一點:
const greeting = ‘say Hi’;
greeting = ‘say Hello instead’; // error: Assignment to constant variable.
或者這個這樣:
const greeting = ‘say Hi’;
const greeting = ‘say Hello instead’; // error: Identifier ‘greeting’ has already been declared
因此,每個const聲明都必須在聲明時進行初始化。
當用const聲明對象時,這種行為卻有所不同。雖然不能更新const對象,但是可以更新該對象的屬性。 因此,如果我們聲明一個const對象為
const greeting = {
message: ‘say Hi’,
times: 4,
};
同樣不能像下面這樣做:
const greeting = {
words: ‘Hello’,
number: ‘five’,
}; // error: Assignment to constant variable.
但我們可以這樣做:
greeting.message = ‘say Hello instead’;
這將更新greeting.message的值,而不會返回錯誤。
延伸閱讀:
二、用 const 還是用 let
ES6 里新增了兩種聲明變量的方式,let 和 const,加上原來的 var,一共就有三種方式來聲明變量了。那到底該用哪個呢?關于“盡可能不用 var” 這一點,大家應該沒有什么意見分歧(其實還是有少數人不這么想的),關于“是用 let 還是用 const”,社區里主要有兩種不同的觀點:
1. 默認全用 let,只在符合一些寫代碼的人的主觀判斷條件的時候用 const,下面舉個這樣的“主觀判斷條件”的例子(實際代碼中用到 const 的幾率大概會是 0.1%):
你能 100% 確定該變量永遠不會在其它的代碼行里被重新賦值,但是該變量的初始值有可能在未來會被調整(有點配置項的意思),且
該變量的初始值是個數字字面量(或者多個數字組成的數學運算表達式)、字符串字面量、布爾字面量、數組字面量、對象字面量、正則字面量、symbol 字面量”(打引號是因為 symbol 其實沒有字面量),且
該變量是個全局變量,或者是模塊內的全局變量
2. 默認全用 const,只有該變量需要被重新賦值才用 let (實際代碼中用到 const 的幾率大概會是 95%),和上面舉的三個主觀判斷條件對比一下差異:
不能 100% 確定該變量永遠不會被重新賦值(可能只是現在是沒被重新賦值,說不定未來會),或者該變量的初始值不是字面量,比如說是個函數調用表達式,或者該變量是個局部變量名列前茅種用法是非常主觀的,比如你用 const 的判斷條件有可能就和我上面舉的不一樣,比如你也許覺得局部變量也可以用 const ?或者你覺的數組和對象是可變的值,怎么能用 const 呢?因為很主觀,所以一個團隊的代碼風格很難達成一致,甚至只有你一個人維護的代碼,const 的用法在不同的時間內也沒有統一的規律,因為可能連你自己都沒有明確的想過:“什么時候我應該用 const”,說白了就是“看心情”。而第二種用法是非常客觀的,簡單直接,沒有含糊不清的地方,如果采用這種用法,至少團隊代碼風格的統一是不成問題的。
以上就是關于let和const的區別的內容希望對大家有幫助。

猜你喜歡LIKE
相關推薦HOT
更多>>
Concurrent Programming, Parallel Programming 的本質區別是什么?
一、Concurrent Programming, Parallel Programming 的本質區別略有交叉,各有不同。Parallel Programming強調如何在多于1個CPU等情況下對系詳情>>
2023-10-13 23:11:46
簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?
一、簡單工廠模式、工廠方法模式和抽象工廠模式的區別簡單工廠模式簡單工模式時類的創建模式,又叫做靜態工廠方法(static Factory Method)。...詳情>>
2023-10-13 21:42:32
聚類和降維有什么區別與聯系?
一、聚類和降維的區別與聯系區別降維就是復雜的高維數據信息簡化為更容易閱讀的低維數據信息,就像素描把三維的立體圖形繪制在二維的平面上,而...詳情>>
2023-10-13 20:26:02
OC中協議和多態有什么區別?
一、OC中協議和多態的區別在Objective-C中,協議(Protocol)和多態(Polymorphism)是兩個不同的概念,它們的區別如下:協議(Protocol):協...詳情>>
2023-10-13 20:01:13熱門推薦
大家都在用的Mpp數據庫有哪些?
沸Concurrent Programming, Parallel Programming 的本質區別是什么?
熱lua編譯器和lua解釋器有什么區別?
熱怎么自定義Visual Studio代碼折疊識別的區域?
新4核4線程和4核8線程區別?
簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?
Spark 和 Hadoop 有什么區別?
cs和bs區別?
axios和ajax區別?
ar模型和ma模型的區別?
聚類和降維有什么區別與聯系?
DOF和HP有什么區別?
OC中協議和多態有什么區別?
SAS 9.0中,class指令跟by指令有哪些區別?
技術干貨






