代码一:
foo()
if(true){
function foo(){
console.log('a')
}
}
代码二:
foo()
function foo(){
console.log('a')
}
代码一为什么报错
代码三:
if(true){
foo()
function foo(){
console.log('a')
}
}
javascript并不是以代码段为作用域,而是以函数。
再根据命名提升的原则
chrome代码一没有报错
第一个是作用域链。
第二个可以的原因是函数声明提升,去博客搜
作用域的问题,第一个报错因为你不在同一个代码块内,多了个if判断,ie10-不理会if块,函数直接提升了,直接浏览器会报错,放后面才会调用到的,但是如果是false在后面也会报错,没有执行if生成函数
代码1的函数不是全局函数,只是一个局部函数。函数提升也只是提升到if语句的顶部而已!
首先js确实是以函数为作用域的,if是没有作用于之分的,至于为什么会报错,我看了一下控制台
foo确实变量提升到window里面了,但是当运行到foo的时候,所以foo只是一个变量undifined ,,并没有执行到if 里面的语句,调用foo()就会出错,
如果你讲foo放到下面,写成如下。就会输出a了