你不知道的ES6知識 關於變數宣告的方式

2021-09-29 19:05:35 字數 1486 閱讀 9261

es6不僅引入let和const關鍵字用於解決變數宣告的問題,同時引入了塊級作用域的概念

塊級作用域:**執行時遇到花括號,會建立乙個塊級作用域,花括號結束,銷毀塊級作用域

var 宣告的變數會掛載到全域性變數window上,進而造成全域性變數的汙染

var 宣告的變數存在變數提公升,可以在定義變數前訪問,只是訪問到的值為undefined,並不會報錯

console.

log(a)

// uncaught referenceerror: cannot access 'a' before initialization

let a =

1

var 宣告的變數允許重複宣告,會造成資料被覆蓋

let a =

1let a =

2// uncaught syntaxerror: identifier 'a' has already been declared

const 擁有let的所有優點,唯一與 let 有區別的地方就是,const定義的變數是不可改變的,這裡的不可改變指的是變數的記憶體空間內不能發生改變

const obj =

// 此時obj儲存的是乙個位址指標,該指標指向的是一塊存有物件的記憶體空間

obj.name =

'61'

// 這裡我們修改的obj內儲存的那個指標指向的記憶體空間,並沒有修改obj記憶體中儲存的這個指標

console.

log(obj)

//

其實在底層實現上,let的宣告還是會存在變數提公升的,只不過這次的提公升會將變數放置到乙個黑盒子中,這個黑盒子es6定義為"暫時性死區",當你在let或者const宣告的變數之前使用時,暫時性死區就會發生作用,給你丟擲"cannot access 『a』 before initialization"這樣的錯誤,當程式執行到該變數宣告時才會從暫時性死區中移出

在for迴圈中,會進行特殊的處理,即在每次進入迴圈體的時候都會開啟乙個新的作用域,並且將迴圈變數繫結至該作用域內上(每次迴圈都是乙個新的迴圈變數)

var 將變數提公升至全域性作用域內,並掛載到window上 --

>

for(

var i =

0; i <

10; i++

)console.

log(i)

// 10

let 在迴圈體結束後會銷毀迴圈變數 --

>

for(

let i =

0; i <

10; i++

)console.

log(i)

// uncaught referenceerror: i is not defined

es6你不知道的小知識點

字串 模板字串 let message 你好啊 codepointa 返回ascii值 fromcharcode 返回對應 includes console.log xiaoming includes om startswith console.log xiaoming startswith om ...

關於integer你不知道的知識點

integer num3 128 integer num4 128 num3 num4 true or false?integer num1 1 integer num2 1 num1 num2 true or false?第一題答案是false 第二題答案是true integer內部定義了乙個內...

你不知道的css小知識

使用 webkit transform scale 一種字型有粗體 斜體 下劃線 刪除線等諸多屬性。但是並不是所有字型都做了這些,一些不常用的字型,或許就只有個正常體,如果你用italic,就沒有效果了 這時候你就要用oblique.可以理解成italic是使用文字的斜體,oblique是讓沒有斜體...