我试图理解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中的对象,所以我无法理解这种行为。
请从内部角度解释一下。
由于
答案 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();