一个关于this的问题

来源:1-1 导学

一只小木马

2022-07-14

老师我运行了下这段代码,为什么结果是undefined和1
第一次调用b,setTimeout的回调因为是箭头函数,箭头函数的this指向其父级指向的this,那么不是指向window吗
第二次调用b,用call改变了b中的this指向,所以箭头函数中的this指向了a,但是因为setTimeout是宏任务,要等同步任务执行完成之后再执行,后续同步任务不是更改了a的值吗,但是为什么还是1不是2,有点不太明白

var a = 0;
(function() {
    var a = { a : 0 };
    var b = function() {
        setTimeout(() => {
            console.log(this.a)
        })
    }
    b(); // undefined
    b.call(a); // 1
    a.a = 1;
    a = { a : 2 }
})()
写回答

1回答

双越

2022-07-15

我用你的代码,在 chrome 控制太执行,打印的是 0 1 

你再重新确认一下

0
2
双越
回复
一只小木马
因为 setTimeout 里面的函数是异步执行的,执行时,a 早就被赋值为 1 了,不再是 0
2022-07-15
共2条回复

2周刷完100道前端优质面试真题 双越最新力作

『前端面试真题100道』视频详解

1514 学习 · 642 问题

查看课程