if中的变量范围

时间:2016-01-07 08:52:36

标签: javascript

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?我可以遵循任何规则吗?

2 个答案:

答案 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块内的变量声明是同一个变量中的相同变量的重新声明功能范围。