ES6历史及新增两个重要的关键字

ES6历史

前言
ECMAScript是JavaScript的语法标准,而ES6是 JavaScript 的下一个版本标准,2015.06 发版。
ps:严格来说,ECMAScript还包括其他很多语言的语法标准

现在大部分的编写一般都是ES3.1语法,比如jQuery的语法就比较倾向ES3,但是现在的主流框架Vue.js和React.js的语法,就大量用的都是ES6语法,node全部都是ES6的语法

ES6中增加了很多功能上的不足,比如常量、作用域、对象代理、异步处理、类、继承、面向对象

ECMAScript 的历史
ES6 是 ECMAScript 标准十余年来变动最大的一个版本,为其添加了许多新的语法特性。

  • 1995年:ECMAScript的诞生(10天编写)
  • 1997年:ECMAScript1.0标准确立
  • 1998年6月: ECMAScript2.0诞生,包含一些小的更改,用于同步独立的 ISO 国际标准
  • 1999年:ECMAScript3.0诞生,它是一个巨大的成功直到现在我们一开始学习JavaScript,其实就是在学3.0版本的语法
  • 2000年:ECMAScript4.0是当下ES6的前身,但是由于这个版本过于激进,对 ES 3 做了彻底升级,所以暂时被"和谐"了。
  • 2009年12月:ECMAScript5.0版本正式发布
  • 2011年6月,ES 5.1 版发布,并且成为 ISO 国际标准
  • 2013年:ES6草案结束
  • 2015年.6月:ES6正式发布,成为国际标准。
  • 2016年:ES就不在使用版本号命名了,而是使用年份的代号了ES7
  • 2017年:ES8
  • 2018年:ES9

ES6的目标:适应更复杂的应用;实现代码库之间的共享;不断迭代维护新版本
ES6在低版本的浏览器上面不支持可以使用babel语法转换器转换,支持低版本

ES6声明变量

ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: letconst来定义变量

  • var:ES5和ES6中,在某种意义上可以用来定义全局变量(variable简写)
  • let:定义局部变量,替代let,(同一作用域不允许重复定义)
  • const:定义常量(定义后,不可修改)

var全局变量

		//全局作用域
        {
            //局部作用域
            var x=1;
        }
        console.log(x); //1

变量x在局部作用域内声明为局部变量,但是输出语句在在全局变量,但是此时的输出为1,而不是undefined

		// 全局作用域
		var x = 1;
		{
		    // 局部作用域
		    var x = 2;
		}
		console.log(x); // 2

此时输出为2,原因很简单就是因为var声明的x为全局变量

总结:用var关键字声明的变量会变成全局变量,这样就会污染全局变量

let:局部变量

		// 全局作用域
		var x = 1;
		{
		    // 局部作用域
		    let x = 2;
		}
		console.log(x); // 1

此时输出为1,因为let声明的为局部变量,只会在局部作用域内有效,不会影响全局变量x

		// 全局作用域
		var x = 1;
		{
		    console.log(x) // Cannot access 'x' before initialization
		    // 局部作用域
		    let x = 2;
		}
  • let声明的变量不会挂在window中,不会造成全局变量的污染
  • 新增了一个块级作用域{},以前只有函数作用域,全局作用域
  • let是不允许重复声明
  • let不会有声明提前(只是人为看到的效果,实际上是有声明提前,提前临时性的死区中:Cannot access ‘x’ before
    initialization)

const:常量

		// 全局作用域
		const x = 1;
		{
		   
		    // 局部作用域
		    const x = 2;
		}
		 console.log(x) // 1
		const PI = 3.141592653589793;
		PI = 3.14;      // 报错
		PI = PI + 10;   // 报错

const定义常量与使用let 定义的变量相似:

  • 二者都是块级作用域
  • 都不能和它所在作用域内的其他变量或函数拥有相同的名称

两者还有以下两点区别:

  • const声明的常量必须初始化,而let声明的变量不用

  • const 定义常量的值不能通过再赋值修改,也不能再次声明。而 let 定义的变量值可以修改。

总结:

  1. const声明的变量不会挂在window中,不会造成全局变量的污染

  2. const是不允许重复声明

  3. const不会有声明提前(只是人为看到的效果,实际上是有声明提前,提前临时性的死区中:Cannot access ‘num’
    before initialization)

  4. const不允许被修改,不允许改变内存空间的地址

  5. const声明和赋值必须一次性完成,并且后期不允许改变存储空间的地址

  6. 能使用const就使用const,不能使用就用let。常量的效率比变量要高

  7. const其实可以修改对象的值,这就说明const不能修改栈里面的数据,但是可以修改堆里面的

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值