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