ES6语法特性 - ES6 - ECMAScript特性 - Javascript核心
发布在Javascript编程指南2014年5月23日view:5217
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.html

源代码: https://github.com/RobinQu/Programing-In-Javascript/blob/master/chapters/JavaScript_Core/ECMAScript/es6/es6_syntax_features.md

  • 本文需要补充更多例子
  • 本文存在批注,但该网站的Markdown编辑器不支持,所以无法正常展示,请到原文参考。

ES6语法特性

ES6包含了很多万众期待的特性支持:

  • arrow functions
  • const
  • let
  • default function params
  • rest parameters
  • call(…)
  • array(…)
  • class
  • computed properties
  • modules
  • for…of
  • Array comprehensions
  • Generator comprehensions
  • Iterators
  • yield
  • Template Strings
  • block-level declaration
  • destructing
  • promoise

里面众多的特性都是让Javascript看起来更规范的好东西,但是大部分都没有被广泛支持。我们仅介绍其中已经至少被一种浏览器和node --harmony下支持的。

在写这篇文章的时候,有如下特性是较为广泛支持的:

  • let1
  • const2
  • Block-delvel declaration
  • for-of
  • yield

对,就这么多了。前三个是为了解决变量声明、定义的问题,而最后一个则影响最大。会在单独篇幅中介绍。下文只介绍前三个特性。

let和block-level declaration

  • var is scoped to the nearest function block (or global if outside a function block)
  • let is scoped to the nearest enclosing block (or global if outside any block),

很多文献、书籍都建议将for循环的起始变量ilen等放置到函数作用于的顶部声明,以避免后续变量持续存在所造成的迷惑。

function() {
    for(var i=0,len=5;i<len;i++) {
        //body
    }
    console.log(i,len);=> 5,5
}

这是因为ES5的Javascript的不支持块级作用域,变量仅仅被限制到函数作用域内。

注意在node中,你需要同时加入--harmony--use-strict来启动,才会支持let。否则会报错: SyntaxError: Illegal let declaration outside extended mode

在ES6内,可以通过let来定义块级作用域的变量:

function() {
    for(let i=0,len=5;i<len;i++) {
        //body
    }
    console.log(i,len) // throw Reference Error
}

最后一个,函数定义的作用域问题:

function f() { console.log('I am outside!'); }
(function () {
  if(false) {
    // What should happen with this redeclaration?
    function f() { console.log('I am inside!'); }
  }

  f();
}());

如上代码,在ES5时代,每个浏览器都会得出不同的结果。但是ES6中,函数定义只在块级作用域内有效,结果很明确。

const关键字

const关键字定义一个块级作用域的常量变量。

const a = "You shall remain constant!";

// SyntaxError: Assignment to constant variable
a = "I wanna be free!";

yield

yield后面有一连串有关Generator和Iterator的内容,会在另外一片文章内详细介绍: Javascript Generator

评论
发表评论
暂无评论
WRITTEN BY
ELFVision
养猫的互联网绅士
TA的新浪微博
PUBLISHED IN
Javascript编程指南

enter image description here

这是一本开源的Javascript编程指南。内容从最简单的语法基础,到复杂的框架编写、项目自动化,都有覆盖。这本开源书籍大致分为三个部分:Javacsript核心基础、浏览器编程、NodeJS环境编程。也希望大家能共同编写!

非常欢迎大家一起来写完这本书!请直接联系我来获取合作。

  • Email: robinqu@gmail.com
  • Weibo: @ELFVision

有两方面大家可以来帮忙:

  • 来抓bug:文章勘误、演示代码更正等等
  • 补充内容
    • 对于某个主题,你希望添加内容
    • 或者你觉得你可以自主写一些相关主题
    • 或是你已经写过相关主题,我也很希望能够直接收录优秀的好文章!

大家也可以直接Fork项目,然后通过PullRequest来提交任何修改。

我的收藏