内部范围中变量的重新分配会影响JavaScript中范围之外的变量



以下JavaScript代码

var variable = 1
console.log(variable)
{
    var variable = 2
}
console.log(variable)

给出输出

1
2

鉴于范围在其他编程语言中工作的方式,我发现这非常不直觉。范围内部变量的重新分支不应影响范围之外的变量的值。

我在Firefox和Chromium上对此进行了测试。我是做错了什么还是这是JavaScript的预期行为?

作为参考,这是其他编程语言中发生的事情:

#include<stdio.h>
int main() 
{
    int variable=1;
    printf("%in",variable);
    {
        int variable=2;
    }
    printf("%in",variable);
    return 0;
}

输出:

1
1

在ES6中,您可以使用let,它尊重块范围

let 语句声明声明块范围本地变量,可选将其初始化为一个值。

而不是var声明。

var variable = 1;
console.log(variable);
{
    let variable = 2;
}
console.log(variable);

最新更新