1、new操作符具体做了什么?
1.在内存创建一个新对象
2.把构造函数中this指向新建的对象
3.会在新对象上添加一个__proto__属性,指向函数的原型对象prototype
4.判断函数返回值,如果值是引用类型就直接返回值;否则返回this(创建的新对象)
2、说下什么是IIFE函数
IIFE(立即调用函数表达式)是一个在定义时就会立即执行的函数。
3、浅拷贝与深拷贝有何区别?如何实现?
浅拷贝:拷贝的是原对象的内存地址
深拷贝:在内存中把原对象复制一份
浅拷贝的实现方式有:
(1)直接变量赋值
(2)Object.assign();但目标对象只有一层的时候,是深拷贝;
(3)扩展运算符(...);目标对象只有一层的时候,是深拷贝;
深拷贝就是在拷贝数据的时候,将数据的所有引用结构都拷贝一份。
深拷贝的实现方式有:
(1)结合使用JSON.parse()和JSON.stringify()方法。
(2)手写遍历递归赋值;
4、字符串截取方法substr、 substring、 slice三者的区别
substr(n,m):截取的是字符串中索引为n开始的,并且截取m位
substring(n,m):从索引为n的位置开始截取,
截取到索引为m的位置但是不包含索引为m这一项
slice(n,m):和substring一样,但是他可以支持负数索引
5、函数柯里化
概念:把一个接收多个参数的函数变成接收单一参数
并且返回能够接收新参数的函数;比如:add(1)(2)(3)(4) = 10;
function add(num){
var sum=num;
var fn=function(v){
sum+=v;
return fn
};
fn.toString=function(){
return sum
};
return fn
}
console.log(add(1)(2)(3)(4)) // 10
6、判断Array类型的几种方式0
1.[] instanceof Array
2.[].constructor === Array
3.Object.prototype.toString.call([]) === '[object Array]'
4.Array.isArray([])
7.this指向的各种情况都有什么?
1.全局作用域中的函数:非严格模式下其内部this指向window
2.对象内部的函数:其内部this指向对象本身:
3.构造函数:其内部this指向生成的实例:
4.由apply、call、bind改造的函数:其this指向第一个参数:
5.箭头函数:箭头函数没有自己的this,看其外层的是否有函数,
如果有,外层函数的this就是内部箭头函数的this,
如果没有,则this是window。
(函数定义时的this,而不是调用时this)
8.什么是AJAX?如何实现?
ajax是一种能够实现网页局部刷新的技术,可以使网页异步刷新。
ajax的实现主要包括四个步骤:
(1)创建核心对象XMLhttpRequest;
(2)利用open方法打开与服务器的连接;
(3)利用send方法发送请求;("POST"请求时,还需额外设置请求头)
(4)监听服务器响应,接收返回值。
9.什么是高阶函数?
高阶函数是对其他函数进行操作的函数;
高阶函数就是一个接收函数作为参数或将函数作为输出返回的函数。
例如,Array.prototype.map,Array.prototype.filter 和
Array.prototype.reduce 是语言中内置的一些高阶函数。
后面更新的面试题都集合在这个链接中2022最全最新前端面试题(附加解答)_心如天然薄荷清凉的博客-CSDN博客_前端面试题