詳解let和const變數宣告

2021-08-17 01:16:12 字數 1166 閱讀 3234



let和const在很多任務程師眼裡可能只是變數宣告符,其實錯了!它還是有很多小細節值得注意的,這裡我簡單介紹幾點。

一、塊級作用域

在es6之前我們腦海裡應該只存在全域性作用域和函式級作用域,沒有塊級作用域。那麼為什麼要引入塊級作用域呢?

相信很多剛入門的同學看到上述**會有所不解,其實在全域性作用域str變數已經被宣告且賦值,為什麼我函式裡面訪問不到呢。這裡就牽扯到變數提公升和函式級作用域的概念。上述**其實等同於下放**,當函式被執行的時候生成了乙個新的作用域也就是函式作用域,js引擎會把變數宣告提到方法體的最前面,大家可以看到只是宣告了並沒有賦值。所以就是 undefined。

很多同學面試的時候可能會遇到上面類似的**,疑惑點應該在為什麼會列印出來為什麼會是5,同樣的道理**如同下方。變數會被提公升,所以在迴圈結束之後i就被累加到了5.

es6的let和const宣告符,是不存在變數提公升的;同時也只在塊級作用域生效。

這個答案應該很明顯了吧

二、暫時性死區dn

什麼是暫時性死區呢?很多人可能很迷惑。那就聽我娓娓道來,如果說我們使用了let和const命令,作用域內會對這些命令宣告的變數,在它的宣告週期內形成一種封閉作用域。這在語法上,稱為「暫時性死區」。**展示如下:

因為let和const宣告是不會被提公升的,所以為了保障宣告的有效性,js的解釋引擎會對變數所處的塊級作用域形成一種保護,因此在宣告之前使用會有語法錯誤,是不被允許的。

不能重複宣告

相信大家一般不會宣告重複變數編碼,所以在這裡就不做解釋了。如果大家感興趣可以自己研究或者來現場一起學習。

三、const常量

const宣告符的大多特性和let相同,這裡就不多做解釋了。大家都知道const是宣告常量的,一但變數被宣告成常量它就不能再被繼續修改了。大家要注意的是這裡變數不可被修改的是儲存的位址值不可被修改,意思就是簡單型別的資料是不能修改的。復合型別的資料(主要是物件和陣列)const只能保證這個指標是固定的,而這個具體的物件例項包含的屬性是可以被修改的。看看**我們可能會更清楚:

正如大家所看到的字串a被複製後就不能在修改,而物件和陣列是可以改變它裡面的元素的,但是不能給重新複製乙個新的物件例項。由此就可以斷定const宣告出來的變數存的是固定的位址值。

let 和 const 宣告變數和常量 var

01 作用域只侷限於當前 塊 console.log str1 張三 console.log str2 無列印結果 02 使用let宣告的變數的作用域不會被提公升 03 在相同作用域下不能申明相同的變數 04 for迴圈體現let的父子作用域 var btns document.queryselec...

使用let和const宣告變數和常量

1 let宣告的變數沒有提公升 let宣告的變數也沒提公升,僅僅是沒有初始化 console.log a let a 110 cannot access a before initialization 2 let 配合 也可以形成塊級作用域 if true 中被訪問到 出了塊就訪問不了 let b ...

ES6中宣告變數 let和const特點

在es6中我們有兩種定義變數的方式 let const let特點 1.let定義時不會進行變數宣告提公升 2.變數不允許被重複定義 3.變數不可以被刪除 4.在for迴圈當中用let定義i 迴圈時可以儲存 i 的值 5.在塊級元素中用let定義的變數只能在當前塊級作用域中使用 注 凡是用 包裹的都...