关于ES6--let/const命令

文章目录

  • 1.let和const命令
    • (1)let :声明变量
    • (2)const

ECMAScript 2015(简称 ES2015)这个词,也是经常可以看到的。它与 ES6 的区别是:ES6 的第一个版本,就这样在 2015 年 6 月发布了,正式名称就是《ECMAScript 2015 标准》(简称 ES2015)。2016 年 6 月,小幅修订的《ECMAScript 2016 标准》(简称 ES2016)如期发布,这个版本可以看作是 ES6.1 版,因为两者的差异非常小(只新增了数组实例的includes方法和指数运算符),基本上是同一个标准。根据计划,2017 年 6 月发布 ES2017 标准。
因此,ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准。

1.let和const命令

  • 它们都是块级作用域:
    ES5 只有全局作用域和函数作用域,没有块级作用域:内层变量可能会覆盖外层变量;内层变量可能会覆盖外层变量等等。

(1)let :声明变量

  • 类似于var,但是所声明的变量,只在let命令当前执行的代码块中有效。
    {
        var a=10;//全局变量
        let b=20;//在当前作用域内有效
    }
      console.log(a);//10
      console.log(b);//b is not defined

//适合for循环
//es5 一般情况和闭包
 for(var i=0;i<10;i++){
               setTimeout(function () {
                   console.log(i);//输出一直是10 替代 自加
               },1);
           }
//闭包 
for(var i=0;i<10;i++){
               (function(a){
                   setTimeout(function () {
                       console.log(a);//输出0-10
                   },0);
               })(i);
       }
//es6
//当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量
//函数内部的变量i和外部的变量i是分离的。
//可以代替以前的自执行函数
//for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。
 for(let i=0;i<10;i++){
               setTimeout(function () {
                   console.log(i);//输出0-10 对应i
               },1);
   }
  • 不存在变量提升
   // var
       console.log(f); //undefined
       var f=0;
    //  let
      console.log(fff);//can't access lexical declaration `fff' before initialization
       let fff=5;
  • 暂时性死区(temporal dead zone,简称 TDZ)。
//    只要这个块区域有let  就忽略var
    var f=0;
    if(true){
        console.log(f);
        // Cannot access 'f' before initialization 初始化前无法访问“ f”
        let f;
    }
  • 不允许重复声明
{
function func() {
  let a = 10;
  var a = 1;
}

function func() {
  let a = 10;
  let a = 1;
}
}
//Identifier 'a' has already been declared

(2)const

  • 声明一个只读的常量时,一旦声明,常量的值不能改变。
 const c=30;//常量 可查看不可修改 在当前作用域内有效
 console.log(c);//30
 c=10;//Assignment to constant variable.at...
  • 声明的变量不得改变值,所以声明时需要同时初始化。
const c;
//Missing initializer in const declaration
//const声明中缺少初始化程序
  • const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。

你可能感兴趣的:(ES6)