let关键字和const关键字
特点:
- let和const关键字声明的变量具有块级作用域的特点
- let和const关键字声明的变量没有变量提升
- let和const关键字声明的变量存在暂时性死区问题
块级作用域
块级作用域外面是访问不到里面,只有在块级作用域里面才能访问.
变量提升
变量提升是可以先赋值再声明,var有变量提升问题
但let和const关键字声明的变量不存在变量提升
暂时性死区问题
使用let声明变量就会将该块级作用域封锁,就算你全局作用域声明过变量,在该块级作用域再次声明该块级作用就域封锁,就无法在声明之前调用。
经典面试题
var声明i
打印出的结果是声明呢?
为什么?
我们来拆解一下
当当前作用域没有此变量时根据作用域查找原则要向上一级作用域查找,发现i = 2 ,因为for循环为主线程,调用函数为异步,先执行完for循环再执行函数调用。
let声明i
打印结果
conte声明常量
let、cont、var的区别
Array扩展方法
一、Array.from()
Array.from()有两个参数
- 参数1:要转换的伪数组
- 参数2:函数,回调函数的形参参数为数组当前遍历的一项
只有一个参数时
有两个参数时
第二参数的函数要利用return返回你对数组数据的处理返回到转换好的数组中
数组内置方法find()
find((v,i)=>{return 判断条件})方法将查找到符合条件的对象return返回,我们要用一个变量接收,如果找不到就返回一个undefined
find与filter的区别:find返回的是里面符合条件的值,filter返回的是包含符合条件值的数组
数组内置方法findIndex()
findIndex((v,i)=>{return 判断条件})方法是用于找出第一个符合条件的数组成员的位置,如果没有找到就返回-1
数组内置方法includes()
includes(判断值)返回布尔值,数组里面有就返回true,没有就返回false
模板字符串
模板字符串用两个反引号括住内容
- 可以写: 变量, 运算符,调用api ,调用自定义函数,三元表达式
- 不可以写:语句,如if for ...
String的扩展方法
startsWith和endsWith
repeat()
set()数据结构
它可以实现数组去重的方法返回的是一个对象,我们要将它转换为数组对象
set中的一些方法
set中的遍历
剩余参数
箭头函数中无法使用argument伪数组存储