javascript - 請教,一個 JS 中關於函數提升的問題?
代言
代言 2017-06-12 09:30:06
0
3
646

如下程式碼:

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 了。

代言
代言

全部回覆(3)
代言

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

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

刘奇

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

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

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

你的IIFE中的

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板