82 lines
2.3 KiB
Plaintext
82 lines
2.3 KiB
Plaintext
1:call和apply区别
|
||
|
||
调用一个对象的一个方法,用另一个对象替换当前对象
|
||
例如:B.apply(A, arguments); 即A对象应用B对象的方法。
|
||
|
||
而不同之处在于传递的参数,
|
||
|
||
apply最多只能有两个参数——新this对象和一个数组argArray,如果arg不是数组则会报错TypeError;
|
||
|
||
call则可以传递多个参数,第一个参数和apply一样,是用来替换的对象,后边是参数列表。
|
||
|
||
https://www.w3school.com.cn/js/js_function_apply.asp
|
||
|
||
2. 闭包是什么,有什么特性,对页面有什么影响
|
||
|
||
答案:闭包就是能够读取其他函数内部变量的函数,使得函数不被回收,如果过多使用闭包,容易导致内存泄露
|
||
|
||
function a () {
|
||
|
||
var ddd = 1
|
||
function b () {
|
||
ddd+= 1
|
||
log(ddd)
|
||
}
|
||
return b;
|
||
}
|
||
|
||
var c = a();
|
||
c()
|
||
c()
|
||
c()
|
||
|
||
3:深拷贝 浅拷贝
|
||
|
||
只针对对象和数组的
|
||
|
||
|
||
浅拷贝 相互影响
|
||
|
||
Object.assign() 只有源对象,没有目标对象时为浅拷贝
|
||
|
||
深拷贝 相互不影响
|
||
|
||
JSON.parse(JSON.stringify())
|
||
for in 遍历,然后递归赋值
|
||
Object.assign() 只有源对象,没有目标对象时为浅拷贝
|
||
|
||
|
||
4:原型链
|
||
|
||
prototype 被定义为:给其它对象提供共享属性的对象。
|
||
|
||
既然 prototype 只是恰好作为另一个对象的隐式引用的普通对象。那么,它也是对象,也符合一个对象的基本特征。
|
||
|
||
也就是说,prototype 对象也有自己的隐式引用,有自己的 prototype 对象。
|
||
|
||
如此,构成了对象的原型的原型的原型的链条,直到某个对象为 null,整个链条终止。
|
||
|
||
|
||
在js中每个对象都有个 prototype 原型属性,原型属性是为其它对象提供共享属性的对象。而 prototype 本身也是个
|
||
对象,所以也有自己的 prototype 原型,如此构成了对象的原型的原型的原型的链条,直到某个对象为 null,整个链条终止。
|
||
|
||
|
||
|
||
|
||
5:数组去重
|
||
|
||
|
||
|
||
1:定义一个新数组,使用indexOf(或者 includes) 判断是否没有,如果没有就保存到新数组
|
||
|
||
2:使用es6 的set,因为set(或者 Map)是不允许重复的,然后使用 Arrar.from 转换为数组 或者 使用object
|
||
|
||
3:使用 splice ,依次判断前一位和后一位是否相等,然后从后向前删除
|
||
|
||
|
||
如何中断ajax请求
|
||
|
||
原生: ajax.abort()
|
||
Axios: cancelToken
|
||
|