Skip to content

原生js

1、闭包是什么?利弊?如何解决弊端?

闭包是什么:JS中内层函数可以访问外层函数的变量,外层函数无法操作内存函数的变量的特性。我们把这个特性称作闭包。

闭包的好处:

隔离作用域,保护私有变量;有了闭包才有局部变量,要不然都是全局变量了。 让我们可以使用回调,操作其他函数内部; 变量长期驻扎在内存中,不会被内存回收机制回收,即延长变量的生命周期; 闭包的弊端:内层函数引用外层函数变量,内层函数占用内存。如果不释放内存,过多时,易引起内存泄露。

解决办法:无法自动销户,就及时手动回收,使用后将函数的引用赋null。

2、深度拷贝

1、深拷贝与浅拷贝的区别?

拷贝的层级不同,深拷贝是指每一层数据的改动都不会影响原对象和新对象,浅拷贝只有第一层的属性变动不互相影响,深层的数据变动还会互相影响。

2、实现拷贝的方法有哪些?

    浅拷贝:数组可以用拓展运算符[...arr],或者slice().浅拷贝对象可以用Object.assign({},obj)

    深拷贝:JSON.parse(JSON.stringify(obj)),或封装递归方法,或使用第三方库的方法,比如                        JQuery的$.extend({},obj),或者lodash 的cloneDeep
3、浏览器存储,他们的区别?

localStorage:永久保存,以键值对保存,存储空间5M sessionStorage:关闭页签/浏览器时清空 cookie:随着请求发送,通过设置过期时间删除 session:保存在服务端 localStorage/sessionStorage是window的属性,cookie是document的方法

4、常用的数组方法有哪些?

改变原数组:push、pop、shift、unshift、sort、splice、reverse 不改变原属组:concat、join、map、forEach、filter、slice slice和splice的区别?

slice切片的意思,根据传入的起始和终止下标,获取该范围数组。 splice可根据传入参数个数不同实现删除、插入操作,直接操作原数组。第1个参数为起始下标,第2个为删除个数,第3个为要增加的数据。 数组如何滤重?

 [...new Set(arr)]
5、Dom事件流的顺序?什么是事件委托?

当页面上的一个元素被点击时,先从document向下一层层捕获到该元素。然后再向上冒泡,一层层触发。

事件委托是将事件写在父级元素上,e.target是事件捕获时那个最小的元素,即选中的元素。所以可以根据e.target操作选中的元素。这样不需要给每个子元素绑定事件,代码更加简约。

6、对原型链的认识?

js通过原型链模拟实现面向对象,比如通过实例化一个构造函数可以给每个对象挂载自己专属的属性,通过给类的prototype上赋方法是所有对象所共有的方法。每次实例化不再赋值原型链上的方法。

前端进阶资料库,持续更新👉👉:https://y03l2iufsbl.feishu.cn/wiki/RDZlw5Atoi7MyrkZPFocMB8nnVg