原题目是这样子的:
window.val = 1;
var obj = {
val: 2,
dbl: function () {
this.val *= 2;
val *= 2;
console.log(val);
console.log(this.val);
}
};
// 说出下面的输出结果
obj.dbl();
var func = obj.dbl;
func();
this呢其实就是这样,分清楚调用就好了。。。
obj中的没有指定调用。默认从函数中查找。如果没有则往上一级查找。。。所以 上面的式子可以写成这样
window.val = 1;
window.val = 1;
var obj = {
val: 2,
dbl: function () {
this.val *= 2;
val *= 2;
console.log(val);
console.log(this.val);
}
};
// 说出下面的输出结果
obj.dbl();
var func = obj.dbl;
func();
这样一来答案就清晰明了了
obj.dbl();这个调用者是obj。。所以其中的this指向obj对象 // 2 4
var func = obj.dbl;
func();
这个呢是全局window调用的func()所以this指向window不相信的话可以在这里console.log(this)。。。就知道每次调用的是谁。。。this到底是指向谁的
因为window.val 第一次运算结果是2
所以最后的结果就是 8 8