内部范围中变量的重新声明会影响javascript中范围之外的变量

时间:2017-06-28 16:13:23

标签: javascript scope variable-assignment declaration

以下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("%i\n",variable);
    {
        int variable=2;
    }
    printf("%i\n",variable);

    return 0;
}

输出:

1
1

1 个答案:

答案 0 :(得分:1)

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

  

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

而不是var声明。

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