如下程式碼:
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 了。
怪我咯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');
}
}
})()
学习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. ..