JS中的const命令你真懂它嗎?

咱們都知道const通常聲明一個只讀的常量,聲明以後就不能修改了,而且聲明時必須初始化指針

const message = 'hello'
message // hello
const message 
// ❌報錯SyntaxError: Missing initializer in const declaration
const message = 'hello'
message ='world'
// ❌報錯TypeError: Assignment to constant variable.

那你們有沒有遇到這樣的狀況code

const dog = {}
dog.name = 'wangcai'
dog // {name: "wangcai"}

奇怪,上面的例子明明改變了變量的值,爲何沒有報錯?
下面咱們就探究一下const的本質對象

本質

其實const保證的並非變量的值不動,而是變量指向的內存地址不得改動
可能有點抽象,咱們來細細分析一下const聲明的全過程內存

const message = 'hello'
  1. js看到變量message後,會給message分配一個空房間(內存空間)
  2. 看到等號右側的字符串‘hello’時,會立馬給它安排另外一個房間,並把‘hello’放到這個房間
  3. js會拿小本本抄下這個房間的房間號(內存地址)
  4. 把這個房間號放到message這個房間裏面,這時message中存儲的就是hello字符串的存儲地址(即指針)

當咱們再次賦值時字符串

message = 'word'

js會將存儲‘word’字符串的地址賦給message,而message又是用const定義的變量,不能夠改變變量裏存儲的內存地址,這時就會❌報錯
而當遇到下面這種狀況it

const dog = {}
dog.name = 'wangcai'
dog // {name: "wangcai"}

則能夠理解爲
dog中存儲的是對象的房間號(內存地址)
dog.name= 'wangcai',在給對象添加屬性的過程,並無改變這個地址,因此結果正常顯示io

劃重點

const保證的並非變量的值不動,而是變量指向的內存地址不得改動變量

最後 🙌

好啦,以上就是我本次分享的所有內容啦,若是你以爲個人文章對你有一丟丟幫助,那麼請不要吝嗇你的贊👍哦,阿門~gc

相關文章
相關標籤/搜索