美文网首页
js面试小笔记

js面试小笔记

作者: 壹点微尘 | 来源:发表于2018-03-12 08:53 被阅读23次

每天记录一点点....

setTimeout

面试官:“你知道定时器吗?”我:“知道”面试官:“那你说说什么是定时器”我:“定时器是可以用setTimeout来实现的”面试官:“setTimeout(function () { console.log("1") },0);console.log("2");那你说说控制台上输出顺序是什么?”

console.log('a');
    setTimeout(function(){
    console.log('b');
},0);
console.log('c');
console.log('d');

控制台输出:
a
c
d
b
我也不截图了。 知道为什么吗,理论上他延迟时间为0不是应该马上执行吗,不是的。因为setTimeout运行机制说过,必须要等到当前脚本的同步任务和“任务队列”中已有的事件,全部处理完以后,才会执行setTimeout指定的任务。也就是说,setTimeout的真正作用是,在“任务队列”的现有事件的后面再添加一个事件,规定在指定时间执行某段代码。setTimeout添加的事件,会在下一次Event Loop执行。好吧,对事件循环不清楚的推荐看看阮一峰-avaScript 运行机制详解
原文链接:https://juejin.im/post/5aa4c47af265da239866e236

promise

打印以下程序的输出:

new Promise(resolve => {
    console.log(1);
    resolve(3);
}).then(num => {
    console.log(num)
});
console.log(2)

这道题的输出是123,为什么不是132呢?因为我一直理解Promise是没有异步功能,它只是帮忙解决异步回调的问题,实质上是和回调是一样的,所以如果按照这个想法,resolve之后应该会立刻then。但实际上并不是。难道用了setTimeout?如果在promise里面再加一个promise:

new Promise(resolve => {
    console.log(1);
    resolve(3);
    Promise.resolve().then(()=> console.log(4))
}).then(num => {
    console.log(num)
});
console.log(2)

执行顺序是1243,第二个Promise的顺序会比第一个的早,所以直观来看也是比较奇怪,这是为什么呢?

Promise的实现有很多库,有jQuery的deferred,还有很多提供polyfill的,如es6-promiselie等,它们的实现都基于Promise/A+标准,这也是ES6的Promise采用的。

为了回答上面题目的执行顺序问题,必须得理解Promise是怎么实现的,所以得看那些库是怎么实现的,特别是我错误地认为不存在的Promise的异步是怎么实现的,因为最后一行的console.log(2)它并不是最后执行的,那么必定有某些类似于setTimeout的异步机制让上面同步的代码在异步执行,所以它才能在代码执行完了之后才执行。

原文链接 (更详细的解释):https://juejin.im/post/5aa3f7b9f265da23766ae5ae

相关文章

  • js面试小笔记

    每天记录一点点.... setTimeout 面试官:“你知道定时器吗?”我:“知道”面试官:“那你说说什么是定时...

  • 杂记

    有C,OC,JS,有面试题,有笔记,有学习知识,不系统,很杂 Node.js最新技术栈之Promise篇

  • Javascript原型理解(面试篇)

    本文是学习JS原型相关知识后的总结与笔记:学习文章参考《一文吃透所有JS原型相关知识点》 在面试中会被经常问到JS...

  • JS面试复习笔记

    JavaScript复习 变量类型值类型typeof :值[开新空间]/引用[引用堆空间]/函数引用类型对象深拷贝...

  • js基础面试题

    面试题:延迟加载JS有哪些方式? 面试题:JS数据类型有哪些? 面试题:JS数据类型考题 考题一: 考题二: 面试...

  • 《JS设计模式》读书笔记(一)

    标签:JS 设计模式 《JS设计模式》读书笔记(二) 《JS设计模式》读书笔记(三) 《JS设计模式》读书笔记(四...

  • 《JS设计模式》读书笔记(六)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设计模...

  • 《JS设计模式》读书笔记(七-完结)

    标签:JS 设计模式 其他读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设...

  • 《JS设计模式》读书笔记(二)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(三) 《JS设计模...

  • 《JS设计模式》读书笔记(三)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设计模...

网友评论

      本文标题:js面试小笔记

      本文链接:https://www.haomeiwen.com/subject/fdggfftx.html