【问题标题】:Javascript local variable is overriding global variable?Javascript局部变量覆盖全局变量?
【发布时间】:2018-04-25 15:30:16
【问题描述】:
var x = 3;

if(1==1){
    if(2==2){
        var x= 5;       
    }
}

document.write(x); // outputs 5

所以我运行了一些测试来更好地理解本地和全局范围的概念。我想用 keyword var 声明 x 会创建一个局部变量并忽略父范围内具有相同名称的任何变量。忽略,我的意思是如何更改变量x 而不会影响其上方范围内的同一变量。但显然我对js变量定义的理解是错误的。请解释一下为什么会这样?

【问题讨论】:

  • 您的理解是正确的,但是由于您在 if 而不是在函数内,因此您的 x 具有相同的范围
  • 带有if 的条件,以及像forwhile 这样的循环不会在JS 中创建自己的范围

标签: javascript scope global-variables local-variables


【解决方案1】:

var 在函数内部声明一个局部变量。对于块范围的局部变量,使用let

var x = 3;
if(1==1){
    if(2==2){
        let x = 5;
    }
}
console.log(x); // prints 3

【讨论】:

    【解决方案2】:

    花括号 ({...}) 不会在 JavaScript 中为 var 创建范围。因此,当您在 {...} 一侧声明任何具有相同名称 (x) 的变量 (x) 时,它不会创建任何新变量,而是实际上会覆盖先前声明的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-13
      • 2019-02-27
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多