Rumah > Soal Jawab > teks badan
在this的绑定方式中,有一种称为硬绑定的方式,如下:
var a = 5;
function foo() {
console.log(this.a);
}
var obj = {
a: 2
};
var bar = function() {
foo.call(obj);
};
bar();
setTimeout(bar, 100);
//为什么再次显示绑定失败?
bar.call(window); //输出2
三次都输出2
前两个我能大概解释下,创建了一个匿名函数,该函数每次调用都会用call()方法显示的把foo的this绑定到Obj上,然后把它赋值给bar,所以每次调用bar()函数this指向obj,即使在setTimeout中也没有发生this绑定丢失情况
我的问题是:在bar()函数中再次用call()方法把想要把this指向window对象,可是却失败了..为什么?
我的想法是:是不是在bar.call(window)时先把this指向了window,然后因为间接引用了匿名函数又把this指向修改成了obj,所以输出了2?
我想知道最后一行bar.call()调用时发生的详细过程,谢谢。