【问题标题】:Javascript this keyword inside functions [duplicate]函数内部的Javascript this关键字[重复]
【发布时间】:2016-06-06 05:28:45
【问题描述】:

我正在尝试了解Javascript 的内部结构。我对this 关键字有一些误解。 Everywhere 声明this 关键字是对调用函数的对象的引用。

但据我所知function 也是一个对象。
所以考虑这个例子

var car = {
  brand: "Nissan",
  getBrand: function(){
    var closure = function(){
      console.log(this.brand);
      console.log(this);
    };
    return closure();
  }
};

car.getBrand();  

为什么this 内部的closure 引用指向global 对象而不是getBrand 包装函数?同样,一切都是 javascript 中的对象,所以我无法理解这种行为。

请从内部角度解释这一点。

谢谢

【问题讨论】:

标签: javascript function object internals ecma


【解决方案1】:

因为this 的值取决于function 的调用方式。closure 的调用没有context 的引用,全局上下文为window在浏览器中

当函数为invoked时,使用Function.prototype.call指定this上下文

var car = {
  brand: "Nissan",
  getBrand: function() {
    var closure = function() {
      console.log(this.brand);
      console.log(this);
    };
    return closure.call(this);
  }
};

car.getBrand();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2013-12-17
    • 2021-09-17
    • 2017-02-20
    • 2013-03-20
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多