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();
解决方案
因为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
推荐阅读
- javascript - 计算多项选择表的总分,并为每个选择的选项设置值
- css - 设置最大列宽并换行(最多两行)
- php - mysql 连接 symfony + docker
- c# - 调用 GetCursorInfo 后获取文件未找到错误
- reactjs - 在 React-Wrapped Chartjs 2 中悬停线时获取 X、Y 轴值
- excel - 从 Powershell 调用具有不同参数计数的 VBA 函数
- c++ - 如何使用 OpenMP 改进归并排序算法?
- salesforce - 无法将 Salesforce api 调用到外部系统显示跨源错误
- javascript - 在没有 jQuery 的情况下在外部单击时模糊 div
- python - 如何将图像文件数据集加载到 TensorFlow Jupyter Notebook