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:變數和函式 宣告 被從它們在程式碼流中出現的位置“移動”到程式碼的頂端。
不同的情況下***宣告***的含義存在差別。
總結:
- 變數必須有建立並且初始化才能正常使用。
MDN 上的 “變數可以在宣告之前進行初始化和使用” 這句話適用於var,不適用與let
var 變數提升了num的建立和初始化, 把num初始化為undefined
let 變數提升了num的建立,但是沒有提升初始化,所以丟擲異常
- 提升是以作用域為單位的
- var 提升
- let 提升
- const 提升
- 函式提升:函式宣告會被提升,但是函式表示式不會
函式宣告
函式表示式
命名的函式表示式,函式識別符號在外圍作用域中也是不可用的
- 函式優先
函式會首先被提升,然後才是變數
後續的函式聲明確實會覆蓋前一個函式宣告
- 把變數提升拆分三個部分:建立,初始化,賦值。對比如下:
如理解有誤:請幫忙指出,萬分感謝!!!