第十天Web前端面试题


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

同步是阻塞模式,异步是非阻塞模式。

同步是一个进程如果执行某个操作需要很长时间,则整个过程都需要等待。

异步是一个进程如果需要执行某个操作很长时间,则继续下一个操作,不会等待

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

嘿嘿我只写了三种,下面有个链接,里面很全哦

最全去重

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

首先,伪数组不是一个数组,它是对象类型,下面是鉴定方法,伪数组就类似于下面的 lis

如何辨别别伪数组

1,具有length属性

2,按索引方式存储数据

3,不具有数组的push,pop等方法

怎样将伪数组转换成真数组

1、Array.from() 方法

为true

2、sArr.slice() 当参数为空时将把整个数组(或者伪数组)中的内容作为一个新数组返回。

3、Array.prototype.slice.call( 数据 )

4、 声明一个空数组,通过遍历伪数组把它们重新添加到新的数组中

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

资源路径404问题

vue-cli3环境下,在根目录新建vue.config.js,在该文件中写入如下

module.exports = {publicPath:'./'}

页面刷新404问题

5,JavaScript中callee和caller的作用

callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数


详介arguments

首先我们来写个阶成函数:

function chen(x){

if (x<=1) {

return 1;

} else{

return x*chen(x-1);

};

};

从这个函数中可以看出来,用到了递归函数,要是改变了函数名,里面的函数名也要随着改变,这样很不方便所以我们用callee来试试

function chen(x){

if (x<=1) {return 1;

}else{

return x*arguments.callee(x-1);

};

};

我们来分析一下为什么这样写:根据callee的定义,可以看出来callee是arguments对象的一个属性,指向arguments对象的函数,这个函数就是chen(chen=arguments.callee),这样解释应该可以理解了吧。

caller是函数对象的一个属性,该属性保存着调用当前函数的函数的引用(指向当前函数的直接父函数)

先来个例子吧

function a(){

b();

};

function b(){

alert(b.caller);

};

a(); //结果就是弹出函数a和内容

我们来解释一下吧,首先函数b的属性caller调用当前函数b的函数引用a(就是指向当前函数b的父函数a),所以结果就是弹出 function a(){ b();};

那么了解了caller和callee,那么可以不可以将二者结合在一起来使用呢

function b(){

alert(b.caller);

};

从这个代码可以看出b函数中调用了b函数名,这样当函数名改变时就很不方便,我们需要替换里面的那个b

前面我们知道用什么方法可以指向当前对象,下面我们就来修改一下:

(function a(){

b();

})();

function b(){

alert(arguments.callee.caller);

};

你可能感兴趣的:(第十天Web前端面试题)