前端常见面试题(十)

目录:

1,简述同步和异步的区别

2, 数组去重(手写代码)

3, 在JavaScript中什么是伪数组?如何将伪数组转化为标准数组

4, SPA路由history模式,打包上线都遇到了哪些问题?你是如何解决的?

5, JavaScript中callee和caller的作用

简述同步和异步的区别

众所周知,javascript是单线程的语言,所谓的单线程,就是从上至下,依次执行,当然这里的依次执行要抛开javascript的预解析机制。

这样做的原因是因为javascript最初是为了操作DOM,运行在浏览器环境下的,而操作DOM的时候,不能是异步的,不然的话两个异步任务同时修改DOM结构的话,会导致浏览器不知道该执行哪一个。

但是这样做也有缺点,当遇到一个响应时间特别长的任务时,容易导致页面加载错误或者浏览器未响应的情况。

同步就是所有的任务都处在同一队列中,不可以插队,一个任务执行完接着开始执行下一个,相对于浏览器而言,同步的效率过低,一些耗费时间比较长的任务应该用异步来执行。

异步就是将一个任务放入到异步队列中,当这个任务执行完成之后,再从异步队列中提取出来,插队到同步队列中,拿到异步任务的结果,可以提升代码执行的效率,不需要因为一个耗费时长的代码而一直等待。



数组去重(手写代码)

1,使用ES6的Set去重

Set是ES6新增的数据类型,Set 的成员具有唯一性

2,使用splice配合两重for循环去重

3,使用for循环配合indexOf去重

4,使用for循环配合sort排序去重

5,使用for循环配合includes去重

6.使用filter配合indexOf去重

三:在JavaScript中什么是伪数组?如何将伪数组转化为标准数组

javascript中的伪数组(类数组):不具有数组的push,pop等方法,但是具有length,以及可以利用for循环遍历等特性,例如函数的 arguments 参数集合,还有通过document.getElementsByTagName等方法获取的NodeList等都是类数组

如何将伪数组转化为标准数组?

四:SPA路由history模式,打包上线都遇到了哪些问题?你是如何解决?

1,资源路径404问题

2,页面刷新404问题

五:JavaScript中callee和caller的作用

1:callee是函数arguments对象内的指针,它指向当前的函数,使得在函数内部递归调用当前函数时,不需要调用函数名称,减少函数内部对于函数名的依赖

2:caller是函数的一个属性,它指向调用当前函数的函数,如果当前函数在其他函数内被调用,则返回调用它的那个函数,如果是在全局环境下被调用,则返回 null

我们可以利用caller的特性跟踪函数的调用链


完结

你可能感兴趣的:(前端常见面试题(十))