箭头函数this指向的问题

function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

var id = 21;

foo.call({ id: 42 });
// id: 42

箭头函数内部的this是指向定义时所在的对象,不是执行时所在的对象。按照这个道理的话,setTimeout内部的函数不管是不是箭头函数应该都是指向window啊。定义的时候,内部的this不应该指向window,执行的时候才是指向调用的对象{ id: 42 }吗?求教

阅读 1k
评论
    17 个回答

    1.普通函数调用 this 指向 window

    function fn() {
        console.log(this);
    }
    window.fn();
    

    2.方法调用 this 指向 调用该方法的对象

    var obj = {
        fun: function () {
            console.log(this);
        }
    }
    obj.fun();
    

    3.作为构造函数的调用 构造函数内部的this指向由该构造函数创建的对象

    var gf = {
        name : "tangwei",
        bar : "c++",
        sayWhat : function() {
            console.log(this.name + "said:love you forever");
        }
    }
    

    4.作为事件的处理函数 触发该事件的对象

    btn.onclick = function () {
        console.log(this);
    }
    

    5.作为定时器的参数 this 指向 window

    setInterval(function() {
        console.log(this);
    }, 1000);
    

    总结:函数内部的this,是由函数调用的时候来确定其指向的

      相似问题
      推荐文章