babel
将es6转为es5格式,有两个字段
{
"presets": [
"@babel/env",
"@babel/preset-react"
],
"plugins": []
}
presets指定转码规则,plugin是插件
let命令
不存在变量提升
用let生命的变量只在声明的块内有效,用var声明的变量会“变量提升”,因此用let声明的变量必须在声明之后调用,否则就会报错
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
暂时性死区
let声明的变量会将作用于绑定到(binding)这个区域,不受外部的影响,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
上面的代码中,tmp后面声明了tmp,所以作用域被绑定到if内,所以报错。
- 比较隐蔽的死区
function bar(x = y, y = 2) {
return [x, y];
}
bar(); // 报错
上面的代码中,x=y,y还没有被声明因此报错
不允许重复声明
let 不允许在同一个作用域内重复声明同一个变量
//报错
function func(){
let a=1;
var a=10;
}
//报错
function func(){
let a=10;
leta