一、闭包
1.怎么理解闭包:
闭包:内层函数+外层函数的变量
2.闭包的作用:
封闭数据,实现数据私有化,外部可以访问函数内部变量
3.闭包引起的问题:
内存泄漏
二、变量和函数提升
1.变量提升
(1).变量在未声明却被访问时会报语法错误
(2).变量在var声明之前被访问,变量值为undefind
(3).let/const 声明变量不存在变量提升
(4).变量提升出现在相同作用域当中
(5).实际开发中推荐先声明在访问变量
2.函数提升
(1).函数提升能够使函数声明调用更灵活
(2).函数表达式不存在提升现象
(3).函数提升出现在相同作用域
函数参数:动态参数arguments伪数组, 剩余参数...arr真数组
三、箭头函数
1.箭头函数属于表达式函数,因此不存在函数提升
2.箭头函数只有一个参数时可以省略圆括号()
3.箭头函数函数体只有一行代码时可以省略花括号{},并自动做为返回值被返回
4.加括号的函数体返回对象字面量表达式 const fn = ()=> ({对象体})
5.箭头函数没有arguments动态参数,只有剩余参数...ary
6.箭头函数不会自己创建this, 他只会指向上一层作用域this指向
7.对象方法箭头函数 this
const obj = {
uname:"韩召华"
sayHi:() => {
console.log (this) // this 指向 window
}
}
obj.sayHi();
const obj = {
uname:"韩召华"
sayHi:function() {
() => {
console.log (this) // this 指向 obj
}
}
}
obj.sayHi();
四、解构赋值
1.数组结构
数组结构是将数组的单元值快速的批量的赋值给一系列变量的简洁写法
基本语法: const [ max, min, [avg, otherParam] ] = [ 100, 60 , [80, 'hanzhaohua' ] ]
2.对象结构
1.赋值运算符 = 左侧的{}用于批量声明变量,右侧对象的属性值将被赋值给左侧变量
2.对象属性的值将被赋值给与属性名相同的变量
3.注意结构的变量名不要和外面的变量名冲突
4.对象中找不到与变量名一致的属性时变量值为 undefind
基本语法:const { uname, age } = { uname: '韩召华',age: 28 }
5.对象解构的变量名 可以重新命名 格式:旧变量名 : 新变量名
const { uname: username, age } = { uname: '韩召华',age: 28 }
6.多级对象解构
const [{ name, family: { mother, father, sister } }] = [{ name:'韩召华', family:{ mother:'妈妈' ,father: ‘爸爸’ , sister:‘姐姐’} }]
五、创建对象方式
1.字面量创建
const obj = { name:'韩召华' }
2.构造函数
1.命名以大写字母开头
2.只能由 ‘new’ 操作符来执行
// 1.创建构造函数 - 通过构造函数批量生成对象
function Pig(name ,age) {
this.name = name
this.age = age
}
// 2.new 实例化
const A = new Pig('韩召华', 28)
const B = new Pig('川建国', 58)
3.作用:
a:创建新对象
b:构造函数this指向新对象
c:执行构造函数代码,修改this,追加新属性
d:返回新对象
4.实例成员 & 静态成员
1.实例成员:通过构造函数创建的对象称为实例对象,实例对象中的属性和方法称为实例成员(实例属性和实例方法)
2.静态成员:构造函数的属性和方法被称为静态成员(静态属性和静态方法)
2.1.静态成员只能构造函数来访问
2.2.静态方法中的this指向构造函数
六、内置构造函数
1.Object:
Object.key() 返回组合对象键值数组
Object.value() 返回组合对象值数组
Object.assage() 对象合并、浅拷贝、新增对象内容
2.Array:
方法 | 作用 | 说明 |
---|---|---|
forEach | 遍历数组 | 不返回数组,经常用于查找遍历数组元素 |
filter | 过滤数组 | 返回新数组,返回的是筛选满足条件的数组元素 |
find | 过滤数组 | 返回筛选值,找到第一个符合条件的元素后就会停止遍历 |
findIndex | 过滤数组 | 返回查找元素的索引值,用于在数组中查找满足给定条件的第一个元素的索引,如果没有找到则返回-1 |
map | 迭代数组 | 返回新数组,返回处理之后的数组元素,想要使用返回的新数组 |
reduce | 累计器 | 返回累计处理结果,经常用于求和 |
some | 短路求值 | 返回布尔值,表示数组中是否至少有一个元素满足条件它会遍历数组中的元素,对每个元素应用一个测试函数,只要有一个元素使得测试函数返回true ,some 方法就会返回true ,并且停止遍历数组 |
every | 短路求值 | 返回布尔值,用于表示数组中的所有元素是否都满足条件,它会遍历数组中的每个元素,对每个元素应用一个测试函数,如果所有元素都使得测试函数返回true ,every 方法就返回true ;只要有一个元素使得测试函数返回false ,every 方法就会返回false ,并且停止遍历 |
concat | 合并数组 | 返回新数组,合并两个数组 |
join | 数组转字符串 | 返回字符串,数组元素拼接为字符串 |
splice | 修改数组 | 在指定的位置添加、替换或删除元素 |
sort | 排序 | 用于对数组元素进行排序。它会改变原始数组,将数组元素按照一定的规则重新排列 |
reverse | 反转数组 | 它的主要功能是颠倒数组中元素的顺序,这个方法会直接修改原始数组,而不是返回一个新的数组 |