由于全局范围变量导致javascript错误

har*_*ish 3 javascript

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之前",但我没有得到它.原因是我试图重新声明全局变量.

有人可以解释为什么会这样吗?

T.J*_*der 5

在上面的代码中,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