【问题标题】:Redeclaration of a variable in an inner scope affects the variable outside the scope in javascript在内部范围内重新声明变量会影响javascript中范围外的变量
【发布时间】:2017-12-02 03:04:16
【问题描述】:

以下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

【问题讨论】:

  • JavaScript 没有块作用域。至少,不是最近(见答案)。因此,您的两个声明实际上都在同一范围内,并且您的 sn-p 中没有像 c 中那样发生阴影。这就是为什么你会在 JS 中到处看到 (function() {...})(); 模式。
  • 谢谢,我现在使用 [stackoverflow.com/questions/762011/… 更新了我的知识
  • 这个资源很好地解释了 javascript 中的不同作用域:stackoverflow.com/questions/500431/…

标签: javascript scope variable-assignment declaration


【解决方案1】:

使用 ES6,你可以使用let,它尊重块作用域

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

而不是var 声明。

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

【讨论】:

  • 你的意思是说'而不是 var 声明,它不尊重块范围'?
猜你喜欢
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
相关资源
最近更新 更多