如题详述: 刚面试完,就来写下了这样一道题目,还没有测试,也希望你不要测试,留下您的分析过程与答案
1、一切都是由我写的一道使用reduce方法求和数组引起的:
var arr = [1,2,3];
arr.reduce((sum,value) => {
return sum + value
},0)
2、但是被面试官在上面加了点东西,就有点懵逼了:
var arr = [1,2,3];
arr.reduce((sum,value) => {
setTimeout(() => console.log(1), 0)
return sum + value
},0)
我说,先输出求和结果,再输出1(个人理解不知道对错,他也没说多少。)
3、接着,他又在上面修改了,想了下还是保留我的答案
var arr = [1,2,3];
arr.reduce((sum,value) => {
setTimeout(() => console.log(1), 1000)
return sum + value
},0)
请问你们是怎样分析与理解的....
第一个是6,没什么说的。
第二个是先6,立刻后3个1。
第三个是先6,一秒后3个1。
面试官是想考js的eventloop,简单的说就是事件的优先级。具体叫哪个名词记不清楚了,setTimeout的优先级没有顺序执行的代码优先级高。拿第二个来说,reduce第一次的时候,遇到了settimeout,把settimeout放到次优先级的队列里,然后第二次,第三次。当reduce都执行完毕,开始执行次优先级队列的任务。第三个就更清楚了,执行次优先级队列之前先等一秒。