我的技术博客

ES6新增语法之一

2019-03-03  本文已影响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;

   }

上一篇下一篇

猜你喜欢

热点阅读