let
和const
命令
1、Babel转码器
babel是一个广泛使用的es6转码器,可以将es6代码转为es5代码,从而在老版本的浏览器执行。这意味着,你可以用es6的方式编写程序,又不用担心现有环境是否支持。// 转码前
input.map(item => item + 1);
// 转码后
input.map(function (item) {
return item + 1;
});
上面的原始代码用了箭头函数,babel将其转为普通函数,就能在不支持箭头函数的JS环境执行了。
1.运行以下命令安装所需的包
cnpm install --save-dev @babel/core @babel/cli @babel/preset-env
2.在项目的根目录下创建一个命名为.babelrc
的配置文件
{
"presets": [
"@babel/env"
],
"plugins": []
}
3.命令行转码
# 转码结果输出到标准输出
$ npx babel example.js
# 转码结果写⼊⼀个⽂件
# --out-file 或 -o 参数指定输出⽂件
$ npx babel example.js --out-file compiled.js
# 或者
$ npx babel example.js -o compiled.js
# 整个⽬录转码
# --out-dir 或 -d 参数指定输出⽬录
$ npx babel src --out-dir lib
# 或者
$ npx babel src -d lib
2、let和const命令
let命令
es6新增了let命名,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命名所在的代码块内有效。{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
1.let作用域是花括号级别的
for循环的计数器,就很适合使用let命令。for (let i = 0; i < 10; i++) {
// ...
}
console.log(i);
// ReferenceError: i is not defined
2.let不存在变量升级
var命令会发生“变量提示”现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。
为了纠正这种现象,let命名改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
3.let不允许重复声明
let不允许在相同作用域内,重复声明同一个变量。// 报错
let a = 10;
let a = 1;
const命令
const声明一个只读的常量。一旦声明,常量的值就不能改变。const PI = 3.1415;
PI // 3.1415
PI = 3;
// TypeError: Assignment to constant variable
const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。const foo;
// SyntaxError: Missing initializer in const declaration
const的作用域与let命令相同:只在声明所在的块级作用域内有效。
const命令声明的常量也是不能提升
const声明的常量,也与let一样不可重复声明
let与const总结:
/**
* var 关键字:作用域是函数级,就是只能放在函数中,才是独立的作用域
*
* let 关键字:
* 1.作用域是花括号级别
* 2.不存在变量提升
* 3.不允许重复声明
*
* const关键字:
* 1.声明常量:不允许重新赋值
* 2.声明必须赋值,或者必须初始化
* 3.作用域是花括号级别
* 4.不存在变量提升
* 5.不允许重复声明
*/