首页 > 解决方案 > 给定代码的输出是什么,为什么?

问题描述

'this' 关键字如何与闭包一起使用?

var a = 1000;
var b = 2000;

var obj2 = {
  a: 100,
  b: 200,
  sum: function(callback) {
    callback();
  },
  sum1: function() {
    console.log("a: " + this.a);
    console.log(this.a + this.b);
  }
};

var obj1 = {
  a: 10,
  b: 20,
  callSum: function() {
    obj2.sum(obj2.sum1);
  }
};

obj1.callSum();

标签: javascript

解决方案


因为obj2.sum1函数是通过引用传递而不是作为对象的成员调用的,this所以是全局范围而不是obj2.

一个更简单的例子:

var a = "global"
var obj = {
  a: "object",
  f: function() { console.log(this.a) }
}
obj.f();    // object
var func_ref = obj.f;
func_ref(); // global

在这两种情况下都在执行相同的功能。但是写作obj.f()意味着上下文的绑定:this = obj


推荐阅读