6 回答
TA贡献1798条经验 获得超3个赞
第一个是6,没什么说的。
第二个是先6,立刻后3个1。
第三个是先6,一秒后3个1。
面试官是想考js的eventloop,简单的说就是事件的优先级。具体叫哪个名词记不清楚了,setTimeout的优先级没有顺序执行的代码优先级高。拿第二个来说,reduce第一次的时候,遇到了settimeout,把settimeout放到次优先级的队列里,然后第二次,第三次。当reduce都执行完毕,开始执行次优先级队列的任务。第三个就更清楚了,执行次优先级队列之前先等一秒。
TA贡献1824条经验 获得超8个赞
个人理解:
arr.reduce 传第二个参数,所以会执行arr.length 次, 也就是会执行 arr.length次setTimeout, 此题如下:
const eventLoop = [];
const arr = [1,2,3]
arr.reduce((sum, value) => {
eventLoop.push(() => console.log(1));
return sum + value;
});
eventLoop.forEach(fn => fn())
不管时间多少,一直在reduce的线程中,所以都是输出求和结果,在执行setTimeout的回调
可能不对,哈哈哈
TA贡献1829条经验 获得超7个赞
其实大概是考你执行顺序吧!不过已经有大佬进行发言了,具体我就不太清楚了。如果没有看到大佬说的优先级,我会依据个人经验推论,既然他显示结果,那么必然是返回后再执行的,但如果它设了 setTimeout 事件,那么第二个,没有延迟,会直接进行执行。而第三个因为有延迟,会出现执行完后,在第一次运行的延迟时间到了连续出现一的结果。
验证后,大佬说的优先级是没错的。
TA贡献1829条经验 获得超9个赞
这需要分析啥?
很简单吧?
你会
就是setTimeout执行三次,因此
稍后
会输出三个1还是setTimeout执行三次,因此
稍后
会输出三个1, 但是时间在1000ms之后
TA贡献1875条经验 获得超5个赞
第一个输出6
第二个是先输出6,然后输出1,1,1
第三个是先输出6,一秒后,再输出1,1,1
这‘三个1’是有顺序的,哪怕时间间隔很小(可能1ms都不到),但还是有顺序的
TA贡献1821条经验 获得超4个赞
添加回答
举报