本篇是用來記錄一下有關Hoisting不太熟悉的部分。
函式傳入參數以及一般變數宣告同時出現時的提升優先順序
1 | function test (a) { |
本題的答案會是10。
那我們就進行以下的拆解,
1 | function test (a) { |
- 你應該知道,用var來宣告的時候,只有宣告的部分會被提升,而賦值的部分會停留在原地。
- 那這邊的a應該會被提升部分的undefined不分給覆蓋掉阿?
請你再看看第一點,你就會明白它可以改寫成下面這樣:由此就可以看得出來為什麼是10了吧1
2
3
4
5var a;
var a;
a = 10;
console.log(a); // 10
a = 12
函式提升跟變數提升的 和 他們之間的優先權
1 | console.log(a); |
上面的答案會是Function: a,原因就是函式本身也會提升,而且它的優先權還比變數高,這就是為什麼結果是函式a的原因囉。
let的Hoisting概念
原本我在學let的時候,本來想說終於有個沒有Hoisting的特性的東西了~~~
但是,沒想到看到以下這個範例,才發現他還是有,只不過let跟var的提升有一點點不一樣。
1 | var b = 10 |
上面這個範例,出現的結果會是b is not defined的錯誤,所以,代表let
也是有Hoisting的特性。