var i = 0;
function a(){
     console.log(i);
     var i=1;
  console.log(i)
}

a();

在执行js前,会对var和function做预解析

当函数a执行时,它的执行环境中有i声明,所以不会使用作用域链上的全局变量i,这个i是初始化了,但是不用它.

当运行第一个log(i)时,变量在函数体内始终是可见的,所以i提前隐式声明为 var i = undefined,log(i)为 undefined

 posted on 2012-12-24 22:16  刘卿  阅读(162)  评论(0编辑  收藏  举报