ES6 基础
let、const、var 的区别
- 是否存在变量提升?
var
声明的变量存在变量提升(将变量提升到当前作用域的顶部)。即变量可以在声明之前调用,值为undefined
let
和const
不存在变量提升。即它们所声明的变量一定要在声明后使用,否则报ReferenceError
错
- 是否存在暂时性死区?
let和const存在暂时性死区
。即只要块级作用域内存在 let 命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响 - 是否允许重复声明变量?
var
允许重复声明变量。let
和const
在同一作用域不允许重复声明变量。
- 是否存在块级作用域?
- var 不存在块级作用域。
- let 和 const 存在块级作用域
- 块作用域由
{ }
包括,if
语句和for
语句里面的{ }
也属于块作用域
- 块作用域由
- 是否能修改声明的变量?
var
和let
可以。const
声明一个只读的常量。一旦声明,常量的值就不能改变。const
声明的变量不得改变值,这意味着,const
一旦声明变量,就必须立即初始化,不能留到以后赋值。
箭头函数与普通函数区别
- 箭头函数是匿名函数,不能作为构造函数,不能使用 new
- 箭头函数内没有
arguments
,可以用展开运算符...
解决 - 箭头函数的 this,始终指向父级上下文(箭头函数的
this
取决于定义位置父级的上下文
,跟使用位置没关系,普通函数this
指向调用的那个对象) - 箭头函数不能通过
call() 、 apply() 、bind()
方法直接修改它的 this 指向。(call、apply、bind
会默认忽略第一个参数,但是可以正常传参) - 箭头函数没有原型属性