循环调用异步操作-冰山工作室-前端-沙翼

原创 qqkillqq2016 教程 javascript 48阅读 2019-03-20 18:54:44 举报

点击查看视频课程

最近遇到一道比较有趣的面试题,题目很简单但是涉及到了很多小的知识点,还蛮有意思的。

假设你是一个面试者,你说说这几行代码会输出什么?,你的内心活动会不会是“这特么不就是一个循环吗?面试官既然这么问老子(他还笑肯定不是好东西,肯定有陷阱),好好想一下,这好像和我看的那个闭包的题很像啊,这面试官是不是没写完啊?怎么办。”

如果稍微改动一些尼,输出结果又是什么?

稍微加了点料(setTimeout)后,是不是看到这道题就舒服了,会不会想“’这不是老子背的最多的闭包问题么,想一哈,setTimeout是会延迟执行的所以外面的log会先执行,i是用var声明的,所以会变量提升,for循环里i最后执行完i++,i变成了5,没错了,老子这题得分了”。

顺着上一个程式想“是不是还可以升华一下,我还能执行出来0 1 2 3 4”

如果你登录一个后台系统,这个账号下有不同角色(角色不固定,后期可能增加),传不同角色进行ajax请求得到相应渲染页面的数据,但是这个接口只接收一个角色参数, 那我们应该怎么按我
们想要的顺序获取数据然后渲染页面?

当你前面所有问题都顺利的回答完了,你想没想过可能还有20%的人可以回答到你这种程度,怎么能变现的比他们牛逼一点尼?你可以考虑使用一下promise

“这道题应该考察我 JavaScript 的运行机制的,让我理一下思路。

首先先碰到一个 setTimeout,于是会先设置一个定时,在定时结束后将传递这个函数放到任务队列里面,因此开始肯定不会输出 1 。
然后是一个 Promise,里面的函数是直接执行的,因此应该直接输出 2 3 。
然后,Promise 的 then 应当会放到当前 tick 的最后,但是还是在当前 tick 中。
因此,应当先输出 5,然后再输出 4 。
最后在到下一个 tick,就是 1 。
2 3 5 4 1”

要是想给面试官留一个关注新技术的更牛逼印象,那就用es7说一下吧。

关于 冰山工作室

QQ群:600633658

加入我们,前端大佬在线答疑解惑,带你深入了解前端知识。

视频课程网盘地址 提取码 ifv9

学习资料将在 冰山工作室 各平台官方账户同步更新, 直通车⤵️
冰山工作室官网
知乎
掘金
微博
前端网
思否
简书
新闻头条
喜马拉雅


评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复