为什么这在javascript中有效?

hgu*_*ser 4 javascript scope

刚才,我看到了一些这样的代码:


if(condition){
    var xx='sss';   
}
//do something

if(condition){
    console.info(xx);
}
Run Code Online (Sandbox Code Playgroud)

现在,我只是想知道为什么第二个if陈述有效?它如何访问xx变量,因为它是另一个if语句中定义的局部变量?

T.J*_*der 10

var在JavaScript中,作用域包含执行上下文(例如,整个函数的作用域,或整个全局作用域,如果var它在全局范围内),而不是块.JavaScript(尚未)具有块范围(ECMAScript6看起来很可能通过new let关键字添加它).

您引用的代码与此完全相同:

var xx;   
if(condition){
    xx='sss';   
}
//do something

if(condition){
    console.info(xx);
}
Run Code Online (Sandbox Code Playgroud)

这在规范的第10.5节中有所描述,它描述了引入新执行上下文时引擎的作用.(它基本上是一个两阶段的过程,首先设置所有声明,然后执行逐步代码.)

更多:可怜的误会var