如下代码:
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...