作用域鏈
什么是作用域
- 從script標簽內的宣告的變數和函式都是0級作用域
- 只要函式才能開辟作用域
- 所以宣告在0級作用域的函式開辟的一個作用域是1級作用域
- 在1級作用域再宣告一個函式就會開辟又一個作用域是2級作用域,依次類推
作用域鏈
- 變數的訪問規則就是,自己的作用域里宣告這個變數就用這個變數,沒有就向上一級的作用域里找 ,一直找到0級作用域,找不到就會報錯
- 每一個作用域向鏈條一樣連接起來,就叫作用域鏈
預決議機制
- 在執行代碼前為了,代碼運行的速率提高,在代碼的執行前瀏覽器會預決議代碼會在記憶體中開辟好變數和函式的空間,執行代碼時就賦值給變數就行了,
- 除了開辟變數和函式的空間,還有一個程序就是變數提升
變數提升
- 就是把所有var宣告的變數和function關鍵字宣告的函式,都會提升到他所在作用域的頂端,然后賦值陳述句留在原來位置
let和var的比較
- 相同點:
都是用來宣告變數的 - 不同點:
1.var在0級作用域里宣告的變數是window的屬性,let宣告的變數不是
2.var宣告的變數在預決議的機制程序會有變數提升,但let的不會
3.var的作用域參考的是函式開辟的作用域,而let參考的塊級作用域就是有(大括號{}就一個塊級作用域)
4.var可以在相同的作用域重復宣告相同的變數名的變數,而let宣告的變數名不能相同,會報錯
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/235562.html
標籤:其他
