Javascript这个关键字里面的函数

时间:2016-06-06 05:28:46

标签: javascript function object internals ecma

我试图理解Javascript的内部结构。我对this关键字有一些误解。 到处都说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中的对象,所以我无法理解这种行为。

请从内部角度解释一下。

由于

1 个答案:

答案 0 :(得分:3)

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

使用Function.prototype.call指定this上下文,而功能为invoked

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

car.getBrand();