在普通的块级作用域中的函数声明会被提升到当前所在作用域的顶部(来自《你不知道的JavaScript》)
if(false){
function a(){
}
}
console.log(a)//undefined (undefined表示声明未赋值,报错表示未声明)
注意: 块级作用域中的函数最终会以函数表达式的形式提升到作用域顶部
if(false){ var a;
var a=1; 等同于==> if(false){
} a=1
}
console.log(a)//undefined (undefined表示声明未赋值,报错表示未声明)
因为在ES5中,JavaScript中if块级没有作用域,for块级没有作用域,function中的块级才有作用域