首页 > JS里的this绑定中硬绑定后为什么不能再修改this的指向?

JS里的this绑定中硬绑定后为什么不能再修改this的指向?

在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()调用时发生的详细过程,谢谢。


bar的this和foo的this有什么关系?


var test=this; 先把this赋给变量,这样方便改

【热门文章】
【热门文章】