let
用来声明变量的,不可以重复声明,可以重复赋值。
const
用来声明常量的,常量称为只读数据。
一旦声明,必须赋值且值不可再改。使用const声明的常量不可以重复声明更不可以重复赋值。
var
用来声明变量的,既可以重复赋值,又可以重复的声明。
相同点
都是声明的关键字
不同点
- 变量提升只有var
- 作用域:var 声明的变量存在于window顶级对象中,let和const的变量存在于独立的块级作用域中。
- let可以重复赋值,const不可以重复赋值
ES6的经典题:暂时性死区
原因就是let和const的块作用域的特性。 当let或const放在{}里,这个{}就会变成块级作用域,被let或const声明的变量锁死,故叫暂时性死区
在ES5时代,作用域只有全局的window和局部的函数作用域,受条件限制,for循环,if和switch里的变量会污染全局,现在有了let和const之后,凡是有{}的代码块里面使用const或let,则{}就会变成块级作用域
三者的使用场景
- let特别适合在for循环中的定时器里使用,作为强类型语法限制的变量。
- const适合作为一次性赋值的常量,多用于数据的版本号或id。
- var适合用来兼容老的IE浏览器,对于很久的项目使用的比较多,目前推荐使用let替代。
模板字符串/超级字符串
- 可以换行,并且原格式输出,自动添加制表符
- 可以使用
${}
的形式插入表达式或变量值
ES6里的解构赋值
对象
- 目的是把每一个属性都变成独立的变量使用
- 使用{}去解构,不光解构自身的属性还会解构原型上的属性
- 对于对象自身没找到的属性,解构出来的变量的值是undefined
数组
- 使用[]去解构,按顺序解构
- 对于不存在的,得到的值也是undefined
解构赋值中的对象和数组的区别是?
- 对象结构按属性名解构
- 数组解构按位置解构
解构赋值中的默认值
var [a=1] = []
如果目标数据中没有对应的项,则使用默认值
function和箭头函数
相同点
- 都是函数
- 都有它的局部作用域
不同点
- 语法不同
- this指向不同
- function指向调用它的对象
- 箭头指向上一层作用域里的对象
- 不定参伪数组
- function函数中有arguments
- 箭头函数没有arguments,但是可以使用...扩展运算符得到类似的形参集合
- 箭头函数不可以作为构造函数使用,不可以使用new调用
- 箭头函数没有原型对象
- 箭头函数只能是匿名函数
- 箭头函数不能改变this指向
函数重载
一个函数根据传入的不同的参数,执行不同的业务,实现不同的效果,这就叫函数重载。
函数的尾部调用
一个函数返回的是另一个函数的返回值。
目的是两个:数据的传递和加工,为了节省内存的开关释放。
函数的链式调用
例子:$('#box').css('color','red').hide().show()
核心概念:每一个被调用的函数都会返回一个值,链式调用中的返回值一般都是操作的目标元素的this