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); // 输出undefinedvar foo = 2;// let 的情况console.log(bar); // 报错ReferenceErrorlet bar = 2;
3.let不允许重复声明
let不允许在相同作用域内,重复声明同一个变量。// 报错let a = 10;let a = 1;
const命令
const声明一个只读的常量。一旦声明,常量的值就不能改变。const PI = 3.1415;PI // 3.1415PI = 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.不允许重复声明*/