var x = 3;
(function (){
console.log('before', x);
var x = 7;
console.log('after', x);
return ;
})();
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,var X全局初始化.所以在函数内部第一个console.log应该打印"3之前",但我没有得到它.原因是我试图重新声明全局变量.
有人可以解释为什么会这样吗?
在上面的代码中,var X全局初始化.所以在函数内部,第一个console.log应该打印"before 3".
不,它应该打印before undefined,因为var无论你在哪里写它,从函数的开头起生效.
您的代码与此完全相同:
var x = 3;
(function (){
var x;
console.log('before', x);
x = 7;
console.log('after', x);
return ;
})();
Run Code Online (Sandbox Code Playgroud)
当然,变量从值开始undefined.
细节:可怜的误会var