JS学习笔记(9. ES6+特性)

1. 作用域

for 循环 if条件中,定义的var 外部可以访问。定义的let const外部无法访问(ES6+)。

2. 垃圾回收

引用清除法,该内存没有引用者则回收(嵌套引用无法回收)。

标记清除法,由上到下将用到的内存标记,未使用的清除。

3. 函数参数

3.1 动态参数

arguments.length 只能在函数中使用,得到一个参数的伪数组。

注释:箭头函数没有动态参数

3.2 剩余参数

在函数的最后一个形参定义为... 例如 function fn1(参数1,参数2, ...参数3)

展开运算符,let a = [1,2,3,4]; console.lot(a) 输出 1 2 3 4

4. 箭头函数

4.1 定义箭头函数

let fn = () => { 语句... }  // 以 () => { } 的形式定义箭头函数

4.2 箭头函数参数

let fn = (参数1, 参数2) => { 语句... } //箭头函数的形参写在括号中

注释:参数只有一个时,小括号可以省略。例如 let fn = 参数 => { 语句 }

4.3 函数体

let fn = (x, y) => { 函数体 }

注释:函数体只有一行代码可以省略大括号。例如 let fn = (x, y) => console.log(x+y)

4.4 返回值

let fn = (x, y) => { return x+y }

注释:函数体只有一行代码可不写return 关键字。例如 let fn = (x,y) => x + y

注释:返回对象类型无法识别大括号需要给对象加小括号:例如 let fn = x => ({name:...})

4. 深浅拷贝

4.1 浅拷贝

方式1: Object o = { ...obj}  // 相当于将obj展开,重新定义给o

方式2:Object.assign(o, obj) // 将obj的属性加到o中,会保留o中原有的非重复属性。

4.2 深拷贝

方式1:递归,用for in 循环 Array 或 Object。当对象属性 instanceof Array 或 Object时

初期化数组 [ ] 或 对象 { } 然后递归调用函数。

方式2:引入第三方库 lodash, 用 _.cloneDeep(obj) 实现深拷贝

方式3:先将对象转成字符串 let str = JSON.stringify(obj);

再将字符串转成对象 let o = JSON.parse(str);

你可能感兴趣的:(javascript,学习,笔记)