關於js變數提升

咩也都唔識發表於2018-04-30

首先我們先來看一道題:

  1. var tmp = new Date();
  2.        function f() {
  3.            console.log(tmp);
  4.           if (false) {
  5.                var tmp = 'hello world';
  6.            }
  7.        }
  8. f();

很多沒弄清楚什麼是變數提升的童鞋,就會以為輸出的是日期,但其實不是,正確答案是
undefined。

為什麼呢?

原來,在js中,函式以及變數的宣告都會被提升到函式最頂部,這就是變數提升。但是,初始化並不會隨著變數宣告提升而提升。

也許你還有點懵,但是接下來我將上面程式碼進行轉換,你就應該明白了:

  1. var tmp = new Date();
  2.     function f() {
  3.         var tmp;//宣告提升
  4.        console.log(tmp);
  5.        if (false) {
  6.        tmp = 'hello world';//初始化不提升
  7.       }
  8.    }
  9. f();

如果有人好奇為什麼if(false)裡面的程式碼還會執行,其實變數提升的時候,並不會直接執行程式碼,所以它並不會判斷if的語句是否需要執行,而是直接提升變數宣告。

謝謝觀看。


相關文章