ES6标准入门

ECMAScript 6.0(以下简称ES6):是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。


ECMAScript和JavaScript的关系 :前者是后者的规格,后者是前者的一种实现!1996年11月,JavaScript的创造者Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这种语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版。


ECMAScript的历史:ECMAScript 1.0是1997年发布的,接下来的两年,连续发布了ECMAScript 2.0(1998年6月)和ECMAScript 3.0(1999年12月)2000年,ECMAScript 4.0开始酝酿。这个版本最后没有通过,但是它的大部分内容被ES6继承了。因此,ES6制定的起点其实是2000年。2009年12月,ECMAScript 5.0版正式发布。2011年6月,ECMAscript 5.1版发布。2015年6月,ECMAScript 6正式通过


Babel转码器:Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在现有环境执行

// 转码前 

input.map(item => item + 1);

// 转码后 

input.map(function (item) { return item + 1;})  

箭头函数,这个特性还没有得到广泛支持,Babel将其转为普通函数,就能在现有的JavaScript环境执行了


ECMAScript版本生成的五个阶段

Stage 0 - Strawman(展示阶段)

Stage 1 - Proposal(征求意见阶段)

Stage 2 - Draft(草案阶段)

Stage 3 - Candidate(候选人阶段)

Stage 4 - Finished(定案阶段)


let命令

不存在变量提升

暂时性死区

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

function () {let a = 10;var a = 1;}

function () {let a = 10;let a = 1;}


块级作用域:

ES5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。

第一种场景,内层变量可能会覆盖外层变量。

var tmp = new Date();

function f() {

console.log(tmp);

if (false) {

var tmp = "hello world";

}

}

f(); // undefined

上面代码中,函数f执行后,输出结果为undefined,原因在于变量提升,导致内层的tmp变量覆盖了外层的tmp变量。

第二种场景,用来计数的循环变量泄露为全局变量。

var s = 'hello';

for (var i = 0; i < s.length; i++) {

console.log(s[i]);

}

console.log(i); // 5

上面代码中,变量i只用来控制循环,但是循环结束后,它并没有消失,泄露成了全局变量。

function f1() {let n = 5;

if (true) {

let n = 10;

}

console.log(n); // 5

}

你可能感兴趣的:(ES6标准入门)