作用域
-
全局作用域
- 尽量少使用,避免变量污染
-
局部作用域
- 函数作用域
- 块级作用域
-
作用域链
- 底层变量查找机制
-
闭包
- 概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域
- 示例:给出示例代码进行解释
- 内层函数+外层函数的变量
- 外部可以访问函数内部的变量,可以实现变量的私有
- 内存泄漏
预解析(了解)
-
变量提升 var
-
函数提升
-
函数表达式不能提升
- var fun = function(){}
-
函数声明可以提升
-
-
建议:使用let或者const,遵循先声明后使用
箭头函数
-
各种写法
-
const fn = () => {}
-
const fn = x => {}
-
const fn = (x,y) => x + y
- 一行代码写法,省略return
-
const fn = (x,y) => ({x,y})
- 返回对象特殊写法
-
-
动态参数
- 普通函数:动态参数-伪数组-arguments-保存所有的参数
- 箭头函数:没有arguments,需使用 剩余参数-数组-...args-保存溢出的参数
-
this问题
- 箭头函数没有this沿用上级作用域this
剩余与展开
-
剩余:解构中使用,函数参数使用
-
展开:数组展开,对象展开
- 展开数组 const arr = [1,2,3] ...arr === 1,2,3
解构赋值
-
数组解构
- [max,min,avg] = [100,60,80]
-
对象解构
- 变量重命名
- 多级解构
- foreach()方法遍历对象数组
- filter() 筛选数组
深入对象
-
创建对象三种方式
- new Object({ name: 'tom' })
- const o = { name: 'tom' }
- 构造函数
-
构造函数
-
语法:大写字母开头的函数
-
创建实例(对象):new 构造函数
-
实例化过程
-
- 创建新空对象
-
- 构造函数this指向新对象
-
- 执行构造函数代码
-
-
返回新对象
- 构造函数里面不需要写return
-
-
-
是函数,创建对象用的
-
2个约定
- 首字母大写
- 需要用new 实例化
-
-
-
实例成员&静态成员
- 实例成员
- 实例属性
- 实例方法
- 静态成员
- 静态属性
- 静态方法
内置构造函数
-
一切皆对象
-
JS中几乎所有的数据都可以基于构成函数创建
- 不同的构造器创建出来的数据拥有不同的属性和方法
-
引用类型
- Object,Array,RegExp,Date 等
-
包装类型
- String,Number,Boolean 等
-
-
Object
-
assign(newObj,obj)
- 合并一个多个对象到目标对象,并返回目标对象
- 1.拷贝对象
- 2.为对象添加新的属性
-
keys()
- 获取对象中所有key集合,数组
-
values()
- 获取对象中所有的值集合,数组
-
-
Array
-
常用方法(高阶函数)
-
forEach filter map reduce find every
-
其他
- find findIndex every some splice join sort reverse concat
-
reduce()
-
-
- forEach()
- filter()
- map()
- join()
- find()
- every()
- 如果都满足一个条件则返回true
- 如果有一个不满足返回false
- 其他
- Array.from()
- 将伪数组转为数组
-
String
-
常用方法
-
split startsWith includes substring
-
其他
- toUpperCase toLowerCase indexOf
-
-
length长度属性,String()直接使用转字符串
-
num.toString()
- 转换为字符串
-
-
Number
- Number() 直接使用传数字
- toFixed() 设置保留小数位的长度
- String(number) number.toString() 数字转字符串的两种方式