let 和const 與 var關鍵字的區別以及作用域
es6中新增的用宣告變數的關鍵字:let,const
在es6之前javascript衹有全域作用域和區域作用域,在es6中新增了塊級作用域(一對大括弧產生的作用域),具有塊級作用域的變數只能在塊級作用域中訪問。這樣的好處在於在業務邏輯比較複雜的時候能夠防止內部變數覆蓋外部變數。
ES5 衹有兩種宣告變數的方法: 使用 var 命令和 function 命令。 ES6 除了新增了 let 和 const 命令,還有使用 import 命令和 class 命令。所以, ES6 一共有 6 種宣告變數的方法
let:
- 使用let宣告的變數具有塊級作用域,使用var宣告的變數不具有塊級作用域屬性。//宣告的變數只在let命令所在的程式碼塊有效。//[var宣告的變數不具有塊級作用域
- 防止迴圈變數變成區域變數
- 不存在變數提升,只能先宣告再使用
![在這裡寫入圖像描述](https://img-blog.csdnimg.cn/20210408112332441.png
- 具有暫時性死區屬性
//會輸出NUM沒有定義的錯誤]
- 不允許重複宣告
.
const關鍵字:
const關鍵字用來宣告常數的,常數類似於變數,也是用來儲存資料的,常數的儲存的資料也就是值是不可更改的。
1.具有塊級作用域
2.宣告常數時必須賦初始值,只能先宣告後使用
3.常數賦值後,值就不能更改(值對應的記憶體位址不能更改)
(1).基本資料型態:值不能更改
(1).複雜資料型態:資料結構內部的值可以更改,資料值本身不能更改(常數值對應的記憶體位址不能更改)
4. 暫時性死區:如果區域中存在let和const命令,則這個區域對這些命令宣告的變數從一開始就形成封閉作用域
let const var分別宣告變數的區別:
頂層物件:
頂層物件在瀏覽器環境中指的是 window 物件,在 Node 環境中指的是 global 物件。在 ES5 中,頂層物件的屬性與全域變數是等效的。**
作用域:
1.全域作用域
在所有函式之外定義的變數擁有全域作用域,該變數為全域變數。
全域變數可以在當前頁面中任何JavaScript程式碼中訪問。
2.函式作用域
在函式中宣告的變數(包括函式引數)指定在其所宣告的函式內被訪問。
3.塊作用域
由{ }界定的程式碼區域,let宣告的變數具備可訪問塊作用域。
4.作用域鏈
每一段JavaScript程式碼(全域程式碼或函式)都有一個與之關聯的作用域鏈(scope chain)。
當JavaScript搜尋變數x的時候( 變數解析,variable resolution),會從當前作用域開始跟隨作用域鏈向上搜尋,直到找到x變數的宣告,若到達全域作用域中仍未找到,則丟擲一個引用錯誤(ReferenceError)異常。
由於let,const能夠更好地作用域識別,建議可以使用Let宣告變數,const宣告常數