【问题标题】:How can we explain the differences between let and var in global scope of browser? [duplicate]我们如何解释 let 和 var 在浏览器全局范围内的区别? [复制]
【发布时间】:2020-09-02 07:55:37
【问题描述】:

当我使用var关键字时,结果是10

var x = 10;
let foo = {
  x: 90,
  getX: () => {
    return this.x
  }
}

console.log(foo.getX())

但是undefined是我使用let关键字时的结果:

let x = 10;
let foo = {
  x: 90,
  getX: () => {
    return this.x
  }
}

console.log(foo.getX())

当它们都具有相同的全局范围时,我无法理解为什么会有两个不同的结果。

【问题讨论】:

    标签: javascript var arrow-functions let global-scope


    【解决方案1】:

    作为您的对象方法,您使用了箭头函数,其上下文(this 值)绑定到您声明它们的函数。

    也就是说,您的 getX 函数的 this 值将是全局对象 (window)。

    然后您尝试访问该对象的x 属性,即10(因为全局范围var 在全局对象上创建属性)以防var

    但是,let 永远不会在全局对象上创建属性,因此在您的第二个示例中,您会得到 undefined

    试试看:

    const object = {
      method: () => this
    }
    
    console.log(object.method() === window) //true
    
    var foo = 1
    let bar = 2
    
    console.log(foo, window.foo) // 1 1
    console.log(bar, window.bar) // 2 undefined

    【讨论】:

      猜你喜欢
      • 2017-08-18
      • 2015-01-30
      • 2017-01-30
      • 2017-11-20
      • 2012-06-07
      • 2019-06-25
      • 2018-12-09
      • 2019-11-17
      • 2016-05-08
      相关资源
      最近更新 更多