面试题只有29%的人能答对,你是其中之一吗?(附事件循环面试题答案解析)..."/>
这道JS面试题只有29%的人能答对,你是其中之一吗?(附事件循环面试题答案解析)...
事实是,即使你不精通JavaScript,也能通过任何JavaScript面试。如果你是JavaScript开发者,并且经常进行面试,那么你知道这些面试中的问题总是相似的(或多或少吧)。在不同的公司进行面试时,面试官会考察你有关相同主题的知识。尽管如此,正如你将看到的那样,正确回答此类问题的统计数据相当低。
如何改变这种情况?轻而易举——尽可能多地练习这些主题,最重要的是要理解结果。本篇文章是本系列的第二篇,废话不多说,大家请看题。
第二题、 关于JS的执行上下文(Context)
上下文问题可能会让你困扰,即使是经验丰富的开发人员。例如,只有29%的开发人员解决了这个棘手但本质上简单的任务。在这道面试题里,我们考察了关于JS上下文执行的理解。
国外社区的网友只有 29% 的人答对了
下面我们来挑战下这道题,题目如下:
'use strict';function foo() {console.log(this);
}function callFoo(fn) {fn();
}let obj = { foo };callFoo(obj.foo);
这道题主要考察面试者对于JavaScript中执行上下文的理解,特别是在函数调用时的this关键字指向。此外,也可以考察面试者对于ES6中新特性的掌握程度,例如对象的解构赋值。通过这个问题,面试官可以了解面试者对于JavaScript语言的掌握情况,以及面试者是否能够理解和解决在函数调用时this指向的问题。
现在你有充足的时间思考这道题的答案,请选择你认为正确的答案,看看是不是其他人的答案是否和你一样,以及统计结束时,我们的正确率是不是能超过外国网友 29% 的正确率,我头条粉丝的正确率是 24.6% 。
目前由于这个投票功能限制,暂时不能告诉你正确答案,为了给你充足的思考和作答时间,本篇文章暂不公布答案和解析,我会在下一篇文章里进行公布,为了方便你能及时收到我下一篇文章的推送,请关注「前端达人」。
如果你是个急性子,想知道答案,可以私信我“执行上下文面试题”获取答案。
上一题答案及解析:事件循环
setTimeout(() => console.log(1), 0);console.log(2);new Promise(res => {console.log(3)res();
}).then(() => console.log(4));console.log(5);
共有83位热心的粉丝参与了这道题。感谢各位积极参与。这道题的正确答案是:2,3,5,4,1。你答对了吗?
这次统计总共有 39 位粉丝答对了这个问题,正确率 46%,大大超出外国网友 18% 的正确率。如下图所示:
关于这道题的解释:
现在我们来模拟一个回答正确的面试者的思考过程:
给定零延迟,我们传递给setTimeout的函数会同步执行还是异步执行?
尽管setTimeout函数延迟时间为零,但回调函数是异步调用的。引擎将把回调函数放置在回调队列(宏任务队列)中,在空闲时将其移动到调用栈中。因此,数字1将被跳过,数字2将首先显示在控制台中。
我们传递给Promise构造函数的函数会同步执行还是异步执行?
Promise构造函数接收的函数会同步执行。因此,控制台中下一个要显示的数字是3。
给定零延迟,我们传递给Promise的then方法的函数会同步执行还是异步执行?
即使Promise在没有延迟的情况下解决,then方法中的回调也是异步执行的。与setTimeout的区别在于,引擎将Promise回调放入另一个队列中,即作业队列(微任务队列),在那里它将等待执行的机会。因此,进入控制台的下一个数字是5。
哪个具有更高的优先级-微任务队列还是宏任务队列,或者换句话说- Promise还是setTimeout?
微任务(Promise)比宏任务(setTimeout)具有更高的优先级,因此控制台中下一个数字将是4,最后是1。
分析回答,我们可以得出结论,大多数受访者错误地认为作为Promise构造函数参数传递的执行函数是异步调用的。
结束
今天的分享就到这里,感谢你的阅读,希望能够帮助到你,文章创作不易,如果你喜欢我的分享,别忘了点赞转发,让更多有需要的人看到,最后别忘记关注「前端达人」,你的支持将是我分享最大的动力,后续我会持续输出更多内容,敬请期待。
更多推荐
这道JS面试题只有29%的人能答对,你是其中之一吗?(附事件循环面试题答案解析)...
发布评论