js變量提高

Refer:函數

https://developer.mozilla.org/zh-CN/docs/Glossary/Hoisting
https://www.zhihu.com/question/19636194
https://developer.mozilla.org/zh-CN/docs/Glossary/Hoisting

感謝大牛們對知識的慷慨。參考了上面的三份文檔,寫一下本身對變量提高的總結。

what:Javascript中執行上下文 (特別是建立和執行階段)工做方式的一種認識。
how:變量和函數聲明被從它們在代碼流中出現的位置「移動」到代碼的頂端。spa

不一樣的狀況下***聲明***的含義存在差異。

總結:code

  1. 變量必須有建立而且初始化才能正常使用。
    MDN 上的 「變量能夠在聲明以前進行初始化和使用」 這句話適用於var,不適用與let
    var 變量提高了num的建立和初始化, 把num初始化爲undefined
    let 變量提高了num的建立,可是沒有提高初始化,因此拋出異常
    clipboard.png
  2. 提高是以做用域爲單位的
    clipboard.png
  3. var 提高
    clipboard.png
  4. let 提高
    clipboard.png
  5. const 提高
    clipboard.png
  6. 函數提高:函數聲明會被提高,可是函數表達式不會
    函數聲明
    clipboard.png
    函數表達式
    clipboard.png

    命名的函數表達式,函數標識符在外圍做用域中也是不可用的
    clipboard.pngip

  7. 函數優先
    函數會首先被提高,而後纔是變量
    clipboard.png
    後續的函數聲明確實會覆蓋前一個函數聲明
    clipboard.png
  8. 把變量提高拆分三個部分:建立,初始化,賦值。對好比下:
    clipboard.png

如理解有誤:請幫忙指出,萬分感謝!!!作用域

相關文章
相關標籤/搜索