给定代码的输出是什么,为什么?

时间:2019-09-23 18:37:28

标签: javascript

'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();

1 个答案:

答案 0 :(得分:1)

由于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