ES6新增语法之一

作者: 叶苏芒 | 来源:发表于2019-03-03 16:23 被阅读0次

    var、let、const三者的区别


          首先,一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系?

          ECMAScript是一个国际通过的标准化脚本语言。JavaScript由ECMAScript和DOM、BOM三者组成。可以简单理解为:ECMAScript是JavaScript的语言规范,JavaScript是ECMAScript的实现和扩展。

          2011 年,ECMAScript 5.1 版发布。之前我们大部分人用的也就是ES5

          2015 年 6 月,ECMAScript 6 正式通过,成为国际标准。

    前奏:块级作用域 {}

     ES5 中作用域有:全局作用域、函数作用域。没有块作用域的概念。

     ES6 中新增了块级作用域。块作用域由 { } 包括,if语句和 for语句里面的{ }也属于块作用域。

    (1)块级作用域

    var定义的变量,var定义的变量可以修改,如果不初始化会输出undefined,不会报错。没有块的概念,可以跨块访问, 不能跨函数访问。

    let定义的变量,let是块级作用域,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。

    const用来定义常量,const定义的变量不可以修改,而且必须初始化。使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。

    (2)不存在变量的提升

    var命令会发生“变量提升”的现象。即变量可以在声明之前使用,值为undefined。

    let命令所声明的变量一定要在声明后使用,否则会报错。

    //var的情况                                                                             

       console.log(foo);     //输出undefined                                    

        var foo=2;                                                                                  

    //let的情况

        console.log(bar);      //报错

         let  bar=2;

    (3)暂时性死区

    只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。

    在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上称为“暂时性死区”。

    var tmp=123;

    if(true){

         tmp='abc';       //报错

         let  tmp;

    }

    目的:主要是为了减少运行错误。

    (4)不允许重复声明

    let不允许在相同作用域内重复声明同一个变量。

    //报错

      function () {

           let a = 10;

           var a=1;

       }

    相关文章

      网友评论

        本文标题:ES6新增语法之一

        本文链接:https://www.haomeiwen.com/subject/poopuqtx.html