首先我們先來看一道題:
- var tmp = new Date();
- function f() {
- console.log(tmp);
- if (false) {
- var tmp = 'hello world';
- }
- }
- f();
很多沒弄清楚什麼是變數提升的童鞋,就會以為輸出的是日期,但其實不是,正確答案是
undefined。為什麼呢?
原來,在js中,函式以及變數的宣告都會被提升到函式最頂部,這就是變數提升。但是,初始化並不會隨著變數宣告提升而提升。
也許你還有點懵,但是接下來我將上面程式碼進行轉換,你就應該明白了:
- var tmp = new Date();
- function f() {
- var tmp;//宣告提升
- console.log(tmp);
- if (false) {
- tmp = 'hello world';//初始化不提升
- }
- }
- f();
如果有人好奇為什麼if(false)裡面的程式碼還會執行,其實變數提升的時候,並不會直接執行程式碼,所以它並不會判斷if的語句是否需要執行,而是直接提升變數宣告。
謝謝觀看。