老师您好,请帮忙讲解一下这个问题
来源:8-5 event loop 的执行过程

慕神0540405
2020-07-22
老师您好,我最近面试碰到一个面试题如下:
var b = ‘2’;
function abc(){
let b = 1;
++b;
setTimeout(() => {
test(‘fun test’);
}, 0);
setTimeout(test(‘test fun’), 1000);
console.log(b);
function test(str){
this.b++;
console.log(str);
console.log(this.b++);
}
}
abc();
在我的理解中,最终的输出顺序应该是:
2,fun test,4,test fun,4
最终我回家自己试过一遍之后的输出结果却是:
test fun,3,2,fun test,5
能给讲解一下吗
写回答
4回答
-
function fn() { console.log('callback fn') } // 第一种情况,我们常见的 setTimeout(fn, 1000) console.log(100) // 第二种情况,带坑,就你题目里的样子 setTimeout(fn(), 1000) console.log(100)
你先把上述代码了解了,这个题目也就能答对了,这里有坑。
(说实话:一开始我也被懵了一下,等了 2 分钟才反应过来的)
052022-06-25 -
Best_Coder_LCN
2022-06-25
查看setTimeout的文档,这个函数会改变this的取值, https://developer.mozilla.org/zh-CN/docs/Web/API/setTimeout 会导致this指向window,所以this.b指向的是全局变量b。 另外 b++ 和 ++b 是不一样的。所以输出是3 2 5
00 -
fstgshow
2021-03-21
为什么我复制这段代码运行报错TypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received undefined
setTimeout(test(‘test fun’), 1000); 这一行报错了012021-03-22 -
慕粉3871079
2021-03-11
这题有坑啊,定时器里跑的test 是已经调用的,不是一个function
00
相似问题