高阶函数&Set&var/let/const的区别
这篇总结主要讲解了高阶函数&Set&var/let/const的区别
1.闭包函数
是什么?一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域
闭包=内层函数+外层函数的变量
作用:解决全局变量污染
function outer() {
let a = 10
fuction fn() {
console.log(a)
}
return fn
}
const fun = outer()
fun()
闭包应用
1.实现数据私有
2.可能会内存泄漏
2.递归函数
函数自己调用自己,他的功能十分强大,自己去查文档去了解了解
数据类型Set与Map
Set数组类型
语法:const set = new Set(数组)
由于是Set类型,而不是数组类型,因此想要使用数组的方法,利用Array.from(set)
Set相当于是数组类型, 和数组Array唯一的区别是不能存储重复元素
场景 : 数组去重 let newArr = [ ...new Set(需要去重的数组) ]
let a = new Set([1, 2, 3, 4, 5,]);
let b = new Set([1, 2, 3]);
// //并集
console.log(new Set([...a, ...b]));
//交集
console.log(new Set(
[...a].filter(item => b.has(item))
));
//差集
console.log(new Set(
[...a].filter(item => !b.has(item))
));
map内置对象自己去查文档,与set的语法差不多
var/let/const
let
let声明的变量,
1.具有块级块级作用域,只在所处于的块级有效
2.变量名不能重复声明
3.不存在变量提升
4.具有暂时性死区比如就是在if语句(块级作用域)中,外面定义了var a = 1,里面再写一个a=3;后面写一个let a;,此时if里面的a = 3就与let a;进行绑定,无法再去访问外部的那个a,这就叫暂时性死区
const
const声明常量,常量就是值(内存地址)是不可变化的量
1.具有块级作用域
2.声明常量时必须赋予初始值
3.常量的变量名一般大写(潜规则)
4.变量名不能重复声明
5.常量赋值后,值不能修改
基本数据类型的值不能修改,因为在修改的过程中改变了内存地址
在数组,对象中,能修改里面的值,但重新赋值(开辟新的内存地址)后,则是会报错
let const var的区别
1.使用var声明的变量,其作用域是在该语句所在函数内,且存在变量提升2.使用let声明的变量,其作用域是在该语句所在代码块内,且不在变量提升3.使用const声明的常量,其作用域是在该语句所在代码块内,且不在变量提升,值不可更改
展开运算符
语法:... 例如:...arr
不会修改原数组
只存在于数组
返回的不是一个数组
运用场景 求数组最大值/最小值 合并数组等
合并数组的三种方法
数组3 = 数组1.push(...数组2)
数组3 = 数组1.concat(数组2)
数组1 = [...数组2, ...数组3]
浅拷贝—对象展开运算符