ES6學習 let和const的特性以及區別

2021-10-04 19:39:04 字數 1859 閱讀 5008

1.let

let用來宣告變數。它的用法類似於var,但是所宣告的變數,只在let命令所在的**塊內有效。

用let宣告變數a:

執行結果:

用發var定義變數b:

執行結果:

let的特點:

1)不存在變數提公升。

注:變數提公升即變數可以在宣告之前被使用,值為undefined。

var就會存在變數提公升的現象,而let規定,let的變數一定要在宣告之後使用,否則就會報錯。

例如:

但是上述情況不會報錯,而是會列印出undefined。

因為var存在變數提公升,所以其執行流程實際是這樣的:

因為變數提公升只會提公升變數的宣告,不會提公升賦值,所以才會輸出undefined。

2)暫時性死區:只要塊級作用域內存在let命令,它所宣告的變數就繫結這個區域,不再受外部的影響。如果區塊中存在let和const命令,這個區塊對這些命令宣告的變數,從一開始就形成了封閉作用域。凡是在宣告之前就使用這些變數,就會報錯。

3)不允許重複宣告:let不允許在相同作用域內,重複宣告同乙個變數,否則就會報錯。

2.const

const宣告乙個唯讀的常量。一旦宣告,常量的值就不能改變,如果用const宣告乙個變數並賦值之後,再給這個變數重新賦值,就會報錯。而且,const一旦宣告變數,就必須初始化,不能留到以後再賦值。如果只宣告不賦值就會報錯。

(注:初始化即賦值)

特點:1)同let,只在宣告所在的塊級作用域內有效。

2)const命令宣告的常量不存在提公升。

3)存在暫時性死區

3.const定義的變數是否可以改變呢?

const是用來定義常量的,而且規定定義的時候必須初始化,且定義後不可以修改。

對於基本資料型別來說,如果定義的時候不初始化值的話就會報錯,錯誤內容就是沒有初始化;如果定義並初始化了之後,再對值進行修改,也會報錯。

因為在基本資料型別中,值是存在棧中的,const定義的這個恆定的變數儲存的是值,而const定義後的變數值不可以修改,修改就會報錯。

對於引用資料型別來說:

1)如果使用const定義引用資料型別的話,物件的屬性是可以被修改的,不會報錯。

例如:

const person =

console.

log(person)

person.name =

"mary"

; console.

log(person)

輸出結果:

2)如果使用const定義引用資料型別的話,修改指向的物件就會報錯。例如:讓person指向另乙個物件:

const person =

person =

console.

log(person)

輸出結果:

這是為什麼呢?

是因為在引用資料型別中,物件存在堆中,物件的位址存在棧中,const定義的這個恆定的變數儲存的是其物件的位址,所以修改物件的內容不會報錯,但是如果修改的是物件的位址,則會報錯。

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 ...