搜尋

首頁  >  問答  >  主體

javascript - 請教,一個 JS 中關於函數提升的問題?

如下程式碼:

function a() {
    console.log('1')
}    

(function() {
    console.log(a);
    if(1) {
        function a() {
            console.log('2');
        }
    }
})()

運行之後,輸出的是undefined。

而去掉 if 條件之後,輸出的又是第二個 a 函數

function a() {
    console.log('1')
}    

(function() {
    console.log(a);

    // if(1) {
        function a() {
            console.log(2);
        }
    // }
})()

知道函數有提升,第二段程式碼,第二個 a 函數會提升到 console.log(a) 這句程式碼之前,所以執行輸出 第二個 a 函數。
可是第一段程式碼,就搞不明白為啥會輸出 undefined 了。

代言代言2754 天前638

全部回覆(3)我來回復

  • 代言

    代言2017-06-12 09:32:06

    條件式函數宣告跟函數表達式的處理方式一樣。因此,條件式函數宣告喪失了函數宣告提升的特性。

    參考網址:/q/10...

    回覆
    0
  • 怪我咯

    怪我咯2017-06-12 09:32:06

    在 if else 語句中使用 function 關鍵字進行函數宣告時,變數的提昇在不同瀏覽器中是不一樣的。只是這裡剛好是提升了個變數的聲明,去掉了 if else 就成了單純的函數作用域。

    function a() {
        console.log('1')
    }    
    
    (function() {
        var a;
        console.log(a);
        if(1) {
            a = function a() {
                console.log('2');
            }
        }
    })()

    回覆
    0
  • 学习ing

    学习ing2017-06-12 09:32:06

    你的IIFE中的

     if(1) {
      a = function a() {
        console.log('2')
      }
    } 

    是函數表達式,而不是函數聲明,當去掉if的時候是函數聲明,沒有去掉if ,conosle.log(a),a表示未定義的變數a,參考https://developer.mozilla.org. ..

    回覆
    0
  • 取消回覆