ES6裡let const var區別總結

2022-02-23 17:32:15 字數 1668 閱讀 9817

首先了解下let與var的區別,主要有以下3點:

1、var在js中是支援預解析的,而let不支援預解析,也就是變數提公升的區別

console.log(a)

var a = 22;

// 列印undefined

console.log(b)

let b = 22

// 報錯:b is not defined

2、var可以重複定義同乙個變數,但是let不可以

var a = 100;

var a = 200;

console.log(a)

// 200

let a = 100;

let a = 200;

console.log(a)

// 報錯:identifier 'a' has already been declared

3、let可以形成塊級作用域,在es6之前js只有函式作用域,沒有塊級作用域。

在es6之前我們是怎麼實現塊級作用域的呢?有朋友已經猜到了,立即執行函式表示式,簡稱iiff。

(function () )()

console.log(aa)

// 報錯:aa is not defined

可以看到通過乙個立即執行函式表示式,我們實現了乙個區域性作用域或者塊級作用域,但是有了let之後就不需要寫這樣的**了,只需要乙個大括號內即實現塊級作用域。

console.log(bb)

// 報錯:bb is not defined

4、var定義的全域性變數會掛載到window物件上,使用window可以訪問,let定義的全域性變數則不會掛載到window物件上

var f = 200;

window.f

// 200

let g = 200;

window.g

// undefined

下面談一下const的區別,以上四點完全適用const,但是const與let或是var還有兩點不同

1、const是用來定義常量的,常量定義之後是不允許改變的。

const aa = 200;

aa = 100;

// 報錯:assignment to constant variable.

錯誤提示為:uncaught typeerror: assignment to constant variable.意思是常量已經賦值了。

這裡有乙個小坑,看如下**:

const bb = {}

bb.a = 200

console.log(bb)

結果列印:,沒有報錯,並且賦值成功。

為什麼 ?因為bb的值並沒有改變,依然指向剛開始賦值的那個物件,並沒有重新賦值,如果將bb重新賦值,就會報錯了,大家可以試試。其實就是引用變數與普通變數的區別。

所以用const定義的常量只要是引用型別資料,改變這個引用型別資料的結構或屬性,都是允許的。引用型別包括哪些呢?陣列和物件。

2、用const定義常量必須賦值。不賦值的話,沒有任何意思,所以報錯。

const cc

// 報錯:missing initializer in const declaration

ES6新增 let const var的區別

var定義的變數,沒有塊的概念,可以跨塊訪問,不能跨函式訪問。let定義的變數,只能在塊作用域裡訪問,不能跨塊訪問,也不能跨函式訪問。const用來定義常量,使用時必須初始化 即必須賦值 只能在塊作用域裡訪問,而且不能修改。es6的let變數宣告特點 1.擁有塊級作用域 2.沒有變數宣告提公升 3....

ES6的宣告 let,const,var區別

a 報錯 referenceerror a is not definedlet 是在 塊內有效,var 是在全域性範圍內有效 a referenceerror a is not defined b 1let a 1 let a 2 var b 3 var b 4 a identifier a has...

es6的let,const,var的知識

1 js引擎在掃瞄 發現變數宣告時,要麼把他們提公升到作用域頂部 遇到var宣告 要麼把他們放到tdz 臨時死區 中 遇到let const宣告 訪問tdz裡面的變數會觸發執行時錯誤,只有執行變數宣告語句後,變數才會從tdz中移出,然後才能正常訪問。if 1 console.log typeof v...