当前位置: 首页 > 科技观察

这4个问题可以检测你的JavaScript水平

时间:2023-03-20 01:14:38 科技观察

JavaScript是现在非常流行的编程语言,基于这种语言衍生出了大量的库和框架。然而,无论高层生态系统如何发展,都离不开原始的JavaScript。在这里,我选择了4个JavaScript面试问题来测试程序员在纯JavaScript方面的技能。1.实现Array.prototype.map如何手动实现Array.prototype.map方法?熟练使用数组的内置方法并不难。但是,如果只熟悉语法而不熟悉原理,就很难真正理解JavaScript。对于Array.prototype.map,它将创建一个新数组,该数组将填充在调用数组中的每个元素上调用提供的函数的结果。如果引用lodash,我们可以这样写一个map函数:functionmap(array,iteratee){letindex=-1constlength=array==null?0:array.lengthconstresult=newArray(length)while(++index{console.log(1)next()console.log(1.1)})middleware.push((next)=>{console.log(2)next()console.log(2.1)})middleware.push(()=>{console.log(3)})letfn=compose(middleware)fn()当我们尝试执行fn时,它会调用中间件中的函数,并将下一个函数作为参数传递给每个小函数。如果我们在一个小函数中执行next,就会调用中间件中那个函数的next函数。此外,如果您不执行next,程序也不会崩溃。执行上面的代码后,我们得到以下结果:1232.11.1那么,我们如何编写一个compose函数来做到这一点呢?首先,compose函数必须返回一个组合函数,因此我们可以编写如下代码:functioncompose(middleware){returnfunction(){}}然后,在返回的函数中,中间件的第一个函数开始执行。我们还将传递下一个函数作为其参数。那么我们这样写吧:functioncompose(middleware){functioncompose(middleware){returnfunction(){letf1=middleware[0]f1(functionnext(){})}}下一个函数作为继续运行的开关在中间件中,如下:functioncompose(middleware){returnfunction(){letf1=middleware[0]f1(functionnext(){letf2=middleware[1]f2(functionnext(){...})})}}然后继续下一个函数调用第三个函数...等等,这看起来像递归!所以我们可以写一个递归函数来完成这个嵌套调用:i+1)})}}}好的,这就是我们的compose函数,让我们测试一下:好的,这个函数确实做了它需要做的事情。但是我们也可以优化我们的compose函数来支持异步函数。我们可以改进以下代码:}}}其实上面的compose函数就是知名节点框架koa的核心机制。当我选择一个候选人时,我承认他/她不熟悉某些框架。毕竟,JavaScript生态系统中的库和框架太多了,没有人能够完全掌握它们。但我确实希望候选人了解这些重要的原始JavaScript技能,因为它们是所有库和框架的基础。结语其实我的草稿里还有一些其他的面试题,但限于本文篇幅,这里就不继续说明了。稍后分享给大家。本文主要是关于纯JavaScript,而不是关于浏览器、节点、框架、算法、设计模式等。如果您也对这些主题感兴趣,请随时发表评论。