Javascript if中变量的作用域

Javascript if中变量的作用域,javascript,Javascript,为什么结果不是2?我想知道为什么在if条件中重新声明a和b不会创建新的变量a和b?有什么规则可以遵循吗?在javascript中,用var声明的变量被提升到函数的顶部。这意味着您期望的范围规则不起作用。ES6标准中使用let关键字解决了这一问题,该关键字将限定您期望的范围。请参阅以下网站了解有关let的更多信息。您应该注意,ES6标准是新的,并没有得到广泛支持。您现在可以通过使用诸如Babel之类的transpiler来使用该标准。你可以在操场上玩这个,比如 “var”将在当前作用域中创建局部变

为什么结果不是2?我想知道为什么在if条件中重新声明a和b不会创建新的变量a和b?有什么规则可以遵循吗?

在javascript中,用var声明的变量被提升到函数的顶部。这意味着您期望的范围规则不起作用。ES6标准中使用let关键字解决了这一问题,该关键字将限定您期望的范围。请参阅以下网站了解有关let的更多信息。您应该注意,ES6标准是新的,并没有得到广泛支持。您现在可以通过使用诸如Babel之类的transpiler来使用该标准。你可以在操场上玩这个,比如


“var”将在当前作用域中创建局部变量,但由于javascript中的作用域是函数级的,在前面提到的代码段中,我们在同一个函数中,javascript解释器认为if块中的变量声明是同一函数作用域中同一变量的重新声明。

javascript没有块作用域。。。它只有功能范围(使用时除外)——@ArunPJohny当然有,这就是
let
的目的。注释中已经提到的@MadaraUchiha的可能副本。。。请参阅
()
中的内容,该内容经过编辑以添加链接。函数和变量声明被提升到封闭函数的顶部。这就是重新声明没有效果的原因。
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();