一、闭包是什么有什么特性,对页面会有什么影响
1.概念:闭包可以简单理解成“定义在一个函数内部的函数“。当其中一个内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
2.特点:
函数嵌套函数。
函数内部可以引用外部的参数和变量。
参数和变量不会被垃圾回收机制回收。
3.用处:
常驻内存会增大内存的使用量;
读取函数内部的变量;
这些变量的值始终保持在内存中,不会在外层函数调用后被自动清除。
4.优点:
变量长期驻扎在内存中;
避免全局变量的污染;
私有化变量;
5.缺点:会造成内存泄露
二、深浅拷贝是什么,如何实现?
首先浅拷贝和深拷贝只针对引用类型。
浅拷贝:浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存
深拷贝:指拷贝对象的具体内容,拷贝结束之后俩个对象虽然存的值是一样的,但是内存地址不一样,俩个对象页互相不影响,互不干涉。
浅拷贝的实现方式:1. 扩展运算符 2. 单层for循环 3. 数组中还可以使用 arr.slice(0), arr.concat(),来实现浅拷贝
深拷贝的实现方式:
1. 通过循环+递归实现深拷贝
2. 通过JSON.stringify()实现
三、Js 中 null 与 undefined 区别
相同点:if 判断语句中,两者都会被转换为 false
不同点:Number 转换的值不同,Number(null)输出为 0, Number(undefined) 输出为NaN
null 表示一个值被定义了,但是这个值是空值
undefined 表示缺少值,即此处应该有值,但是还没有定义
四、map 和 forEach 的相同点和不同点
相同点:都是循环遍历数组中的每一项
forEach 和 map 方法里每次执行匿名函数都支持 3 个参数,参数分别是item(当前每一项)、index(索引值)、arr(原数组) 匿名函数中的 this 都是指向 window 只能遍历数组
不同点:forEach()没有返回值,map() 有返回值,返回出映射后的新的数组