JS进阶篇(提高)

作用域

局部作用域

分为函数作用域和块作用域

var不会产生块作用域

全局作用域

函数中未使用任何关键字声明的变量为全局变量

作用域链

子作用域能够访问父作用域,父级作用域无法访问子级作用域像在g函数中声明一个b f函数是无法访问的


垃圾回收机制GC

什么是垃圾回收机制

垃圾回收机制的算法

引用计数法

        但它却存在一个致命的问题:嵌套引用(循环引用) 如果两个对象相互引用,尽管他们已不再使用,垃圾回收器不会进行回收,导致内存泄露。

标记清除法

闭包

闭包 =  内层函数 + 外层函数的变量

关键是返回函数,把函数赋值给全局的变量

典型例子

总结

变量提升和函数提升

打印出undefined 因为var有变量提升,会把var num提到当前的作用域的最前面但是没有赋值

函数提升

能在声明前调用函数 因为代码执行前会把所有函数的声明都提到当前作用域最前面

这个函数调用错误 因为函数表达式没有提升,它是一个赋值操作

函数参数

动态参数arguments

剩余参数  ...other

总结

展开运算符

可以将数组展开 ...arr1=1,2,3

典型应用:求最大最小值和合并数组

箭头函数(重要)

箭头函数更适用于那些本来需要匿名函数的地方

基本语法

1. 箭头函数属于表达式函数,因此不存在函数提升

2、只有一个参数可以省略小括号

3、如果函数体只有一行代码,可以写到一行上,并且无需写 return 直接返回值

4.加括号的函数体返回对象字面量表达式,就是返回对象时 对象本生带{} 函数体也有{} 分不清

就把函数体的{}写成()如下:

箭头函数的参数

用箭头函数求和

箭头函数this的指代

箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this

就是看上一层作用域的this指向谁(一般函数是谁调用函数 this指向谁)

数组解构

就是把数组里的元素快速批量地赋值给变量的语法

典型应用

必须加分号的情况

变量和单元值数量不相等时

1、变量的数量大于单元值数量时,多余的变量将被赋值为 undefined

2、利用剩余参数解决变量少 单元值多的情况:剩余参数返回的还是一个数组

3.防止有undefined传递单元值的情况,可以设置默认值

4、按需导入,忽略某些返回值

5、支持多维数组的结构

对象解构

对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法

 1. 赋值运算符 = 左侧的 {} 用于批量声明变量,右侧对象的属性值将被赋值给左侧的变量

2. 对象属性的值将被赋值给与属性名相同的变量

3. 注意解构的变量名不要和外面的变量名冲突否则报错

4.对象中找不到与变量名一致的属性时变量值为 undefin

变量名要和属性名一样

要想变量名和属性名不一样咋办

数组对象解构

多级对象结构

选出data进行传参

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值