ES6學習2章 let和const命令

2021-08-13 14:42:59 字數 2062 閱讀 8276

用於宣告變數,類似於var,但let命令所在的**塊內有效

特點:

- 只在**塊內有效

- 不存在變數提公升(必須先宣告後使用,否則會報錯)

- 暫時性死區

- 不允許重複宣告

用let宣告的變數只在當前塊{}中有效,在塊級作用域外是拿不到的

console.log(a) // reference error

es5中 var宣告的變數會有變數提公升,即會賦初始值undefined,而在es6中,let宣告的變數不存在變數提公升。即:只有在let 宣告變數後才能使用變數,否則會報錯

console.

log(a) // undefined

console.

log(b) // reference error

var a =

10;let b =

11;

es6規定,在區塊中只要存在let 和 const 命令,這個區塊會對這些命令宣告的變數,從一開始就形成封閉作用域,凡是在宣告之前就使用這些變數都會報錯。這在語法上,稱為「暫時性死區」(temporal dead zone,簡稱tdz)

var a = 10;

# 例2

function

bar(x=y,y=2)

bar(); //報錯,因為x=y 這一步,y還未宣告。建議y=2放在前面

在同乙個區塊內,不允許重複宣告變數

function

(arg)

function

(arg)

}

在es5中只有全域性作用域和函式作用域,沒有塊級作用域,這會出現內層變數可能會覆蓋外層變數的問題,以及在for迴圈中,用來控制迴圈的變數i,在迴圈結束後會洩露成為全域性變數,造成全域性汙染

const宣告的復合型別資料,只是保證變數名指向的位址不變,不保證該位址的資料不變

const arr = ;

arr.push(1) //可執行『』

console.log(arr) // [1]

arr=['newarr'] //報錯

// 凍結物件

const foo = {}

foo.prop1= 123

;foo.obj=

console.log(foo.prop1) //123

object.freeze(foo)

foo.obj

.num2=222

; // 可執行

foo.prop2 = 456

; //報錯 object is not extensible

// 如下函式用於深度凍結物件

varfreeze = (obj)=>

})}

在es5中只有兩種宣告變數的方法:var 和 function 。在es6中除了加入了let 和 const 命令,還加入了import ,class命令

全域性物件是最頂層的物件,在瀏覽器中指window,在node中指global。

- 在es5中,全域性物件的屬性與全域性變數是等價的。

- 在es6中,用let,const宣告的全域性變數只在當前塊級作用域內有效,不會持載到全域性物件上。

var a = 10;

console.log(window.a) //

10;let b = 11;

console.log(window.b) //

undefined;

ES6學習 let和const命令

1.let命令 所宣告的變數命令所在 塊有效 a referenceerror a is not defined.b 1for迴圈的計數器,就很適合let命令 for let i 0 i arr.length i console.log i referenceerror i is not defin...

es6學習筆記 let和const

console.log b uncaught referenceerror a is not defined 在for迴圈中,迴圈語句部分是乙個作用域,內部又是乙個作用域 for let a 1 a 3 a 在let宣告變數完成前,對變數賦值會出錯es中模仿塊級作用域 function functi...

ES6學習 let和const命令

說明 本文參考阮一峰的ecmascript 6 入門 console.log a 塊外使用會報錯 referenceerror a is not defined for迴圈內使用let和var產生的不同效果 下面 使用的是var,結果為10 var a for var i 0 i 10 i a 9 ...