function a(){
var x,y,a,b;
var a=2;
var b=2;
if (true) {
var a,b;
b=1;
a = 1;
}
alert(a)
}
a();
为什么结果不是2?我想知道为什么在if条件下重新声明a和b不能创建一个新的变量a和b?我可以遵循任何规则吗?
答案 0 :(得分:0)
在javascript中,用var声明的变量被提升到函数的顶部。这意味着您期望的范围规则不起作用。这在ES6标准中使用 let 关键字进行了解决,该关键字将包含您期望的范围。有关 let 的详细信息,请参阅以下网站。您应该注意到ES6标准是新的,并没有得到广泛支持。您现在可以使用像Babel这样的转换程序来使用该标准。你可以在codepen等游乐场玩这个游戏。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let
答案 1 :(得分:0)
"无功"将在当前范围内创建局部变量,但由于javascript中的范围是函数级别,并且在提到的代码片段中我们处于相同的函数中,javascript解释器认为if块内的变量声明是同一个变量中的相同变量的重新声明功能范围。