接经典面试1的说法,在笔试的时候遇到这样的一个题目:
function printing() {
console.log(1);
setTimeout(function() { console.log(2); }, 1000);
setTimeout(function() { console.log(3); }, 0);
console.log(4);
}
printing();
问最后的输出结果,并阐述原因.
这里的答案是:1 4 3 2 ,为什么呢?
在做这样的题目的时候需要理解setTimeout()的作用,这里是设置一个定时器,相比较这两段代码:setTimeout(function() { console.log(3); }, 0);和console.log(4);可以很清晰的看到第一段代码被设置了setTimeout(),在JS中只要代码中被设置了setTimeout(),相比较未被定义setTimeout的代码块,被设置的那段代码都会被排队,即:先执行未被设置setTimeout()的代码块,在执行被设置的代码块,到这里就很清晰了,JS中会先编译:console.log(1);和console.log(4),那么这段两段就会被先后打印出来,即为:1 / 4 ,再然后由于setTimeout()被设置了定时时间,也会有个先后执行顺序,设置的时间越长,被编译的排队时间就越长,这样就会先输出2 / 3,所以最终的结果就是:1 / 4 / 2 / 3.
本文纯属原创;
分类:经典面试题经历;