ES6新增语法之一

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;

   }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是箭头函数?看下面的语法。 为什么要用箭头函数?一个字:短。 1 箭头函数最大的优点就是简短。 2 箭头函数不...
    Condy康迪阅读 9,155评论 0 5
  • ECMAScript6.0(以下简称ES6)是Javascript 语言的下一代标准,已经在2015年6月正式发布...
    喵喵_6744阅读 3,134评论 0 0
  • 一、ES6简介 ​ 历时将近6年的时间来制定的新 ECMAScript 标准 ECMAScript 6(亦称 ...
    一岁一枯荣_阅读 11,269评论 8 25
  • 每个人,从懂事的时候起,就要学会独立,学会坚强,学会靠自己!也许,从小在父母怀抱中长大的你,已经习惯了那种温暖,但...
    云游世界的云游阅读 4,023评论 2 28
  • 几年以前到香港,为了玩好,特意请了一位本地人作为导游。这位导游是为帅哥,可以在英语,普通话和粤语之间自由切换。 细...
    成不熟阅读 1,761评论 0 0