为什么第二次是undefined??

第一次的时候向上找到12 第二次的时候没有向上找吗?为什么报了undefined

var a=12
function b(){
   console.log(a)
}
b()  //12

var a=12
function b(){
   console.log(a)
   var a=6
}
b()  //undefined
阅读 1.8k
3 个回答

不是什么都往上找,如果当前作用域存在该变量就不会往上找了,第二个b相当于:

var a=12
function b(){
   var a;
   console.log(a)
   a=6
}
b()  //undefined

变量/函数声明是会提升的

对比下常考题

var a=12
function b(){
   console.log(a)
   let a=6
}
b()  //let a不会存在变量提升;会抛异常

var a=12
function b(){
   console.log(a)
   var a=6
}
b() //会变量提升,未赋值则报undefined
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题