概要

  1. Babel转码器
  2. letconst命令

    1、Babel转码器

    babel是一个广泛使用的es6转码器,可以将es6代码转为es5代码,从而在老版本的浏览器执行。这意味着,你可以用es6的方式编写程序,又不用担心现有环境是否支持。
    1. // 转码前
    2. input.map(item => item + 1);
    3. // 转码后
    4. input.map(function (item) {
    5. return item + 1;
    6. });
    上面的原始代码用了箭头函数,babel将其转为普通函数,就能在不支持箭头函数的JS环境执行了。

    1.运行以下命令安装所需的包

    1. cnpm install --save-dev @babel/core @babel/cli @babel/preset-env

    2.在项目的根目录下创建一个命名为.babelrc的配置文件

    1. {
    2. "presets": [
    3. "@babel/env"
    4. ],
    5. "plugins": []
    6. }

    3.命令行转码

    1. # 转码结果输出到标准输出
    2. $ npx babel example.js
    3. # 转码结果写⼊⼀个⽂件
    4. # --out-file -o 参数指定输出⽂件
    5. $ npx babel example.js --out-file compiled.js
    6. # 或者
    7. $ npx babel example.js -o compiled.js
    8. # 整个⽬录转码
    9. # --out-dir -d 参数指定输出⽬录
    10. $ npx babel src --out-dir lib
    11. # 或者
    12. $ npx babel src -d lib

    2、let和const命令

    let命令

    es6新增了let命名,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命名所在的代码块内有效。
    1. {
    2. let a = 10;
    3. var b = 1;
    4. }
    5. a // ReferenceError: a is not defined.
    6. b // 1

    1.let作用域是花括号级别的

    for循环的计数器,就很适合使用let命令。
    1. for (let i = 0; i < 10; i++) {
    2. // ...
    3. }
    4. console.log(i);
    5. // ReferenceError: i is not defined

    2.let不存在变量升级

    var命令会发生“变量提示”现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。
    为了纠正这种现象,let命名改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。
    1. // var 的情况
    2. console.log(foo); // 输出undefined
    3. var foo = 2;
    4. // let 的情况
    5. console.log(bar); // 报错ReferenceError
    6. let bar = 2;

    3.let不允许重复声明

    let不允许在相同作用域内,重复声明同一个变量。
    1. // 报错
    2. let a = 10;
    3. let a = 1;

    const命令

    const声明一个只读的常量。一旦声明,常量的值就不能改变。
    1. const PI = 3.1415;
    2. PI // 3.1415
    3. PI = 3;
    4. // TypeError: Assignment to constant variable
    const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
    1. const foo;
    2. // SyntaxError: Missing initializer in const declaration

    const的作用域与let命令相同:只在声明所在的块级作用域内有效。

    const命令声明的常量也是不能提升

    const声明的常量,也与let一样不可重复声明

    let与const总结:

    1. /**
    2. * var 关键字:作用域是函数级,就是只能放在函数中,才是独立的作用域
    3. *
    4. * let 关键字:
    5. * 1.作用域是花括号级别
    6. * 2.不存在变量提升
    7. * 3.不允许重复声明
    8. *
    9. * const关键字:
    10. * 1.声明常量:不允许重新赋值
    11. * 2.声明必须赋值,或者必须初始化
    12. * 3.作用域是花括号级别
    13. * 4.不存在变量提升
    14. * 5.不允许重复声明
    15. */