let定义变量
- 变量不能重复声明
- 块级作用域
- 不存在变量提升(必须先声明后使用)
- 不影响作用域链
var是函数作用域
// 出现异步回调时,var变量提升
for(var i=1;i<=3;i++){
setTimeout(() => {
console.log(i);//三个4
}, 500);
}
// 使用let可解决此问题
const定义常量
- 一定要赋初始值
- 值不能修改
- 块级作用域
- 声明数组和对象的时候,可以对其中的属性或值修改,不会报错
箭头函数
- this是静态的,始终继承外层作用域的this,在定义时确定
- 没有自己的this
- this指向不可变
- 不能当构造函数,不能new
- 不能使用arguments变量(保存函数所有传递的实参,是个对象),但是有rest参数(获取函数实参)
- 适合于与this无关的——定时器、数组方法的回调,不适合于事件回调、对象的方法
普通函数
- 谁调用函数,this就指向谁
- this指向可以通过call、apply、bind改变
- 可以当构造函数,可以new
rest参数
代替arguments(是对象),获取函数实参
rest(是数组),作为函数参数要放在最后
function fn1(...args){
let aa=typeof args
console.log(args);
console.log(aa);
// 是数组可以使用数组的所有方法
args.push(1)
}
fn1('222')
扩展运算符...
将数组转换为,分隔的参数序列
const a=['a','b','c']
function fn(){
console.log(arguments);
}
// fn(a) [a,b,c]
fn(...a) //a,b,c变成序列了
作用
1.数组的合并
const a=['a','b','c']
const b=['d','e','f']
console.log(...a,...b);//a,b,c,d,e,f
2.数组的浅拷贝
const a=[1,2,3]
const b=[...a]
console.log(b);//[1,2,3]
3.将伪数组转为真数组
七种基本数据类型
String、Number、Boolean、Null、Understand、Symbol、BigInt
Symbol
主要作用是创建一个唯一的、不可变的标识符。
// 创建Symbol
// 为其添加一个描述,不会影响其唯一性
let sy=Symbol('s1')
let sy2=Symbol('s1')
console.log(sy===sy2); //false
迭代器
for...of 循环按顺序逐个处理从可迭代对象获取的值。循环对值的每次操作被称为一次迭代,而循环本身被称为迭代可迭代对象。每次迭代都会执行可能引用当前序列值的语句。
当 for...of 循环迭代一个可迭代对象时,它首先调用可迭代对象的 Symbol.iterator]() 方法,该方法返回一个迭代器,然后重复调用生成器的 next() 方法,以生成要分配给 variable 的值的序列。
for...of 循环在迭代器完成时退出(即迭代器的 next() 方法返回一个包含 done: true 的对象)。你也可以使用控制流语句来改变正常的控制流程。break 语句退出循环并跳转到循环体后的第一条语句,而 continue 语句跳过当前迭代的剩余语句,继续进行下一次迭代。
const a=['a','b','c']
for(let i of a){
console.log(i);//a b c 数组的每一个值
}
// 原理
let iterator=a[Symbol.iterator]()
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());//最后一个 done:true
303

被折叠的 条评论
为什么被折叠?



