美文网首页
ES6标准入门

ES6标准入门

作者: 家祖赵匡胤 | 来源:发表于2017-12-06 16:31 被阅读0次

    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标准入门

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