Ecmascript-6
ES6 发布时间2015-6月,又称ECMAScript 2015
http://kangax.github.io/compat-table/es6/
简介
- 形式上是一个普通函数
- 特征上 function与函数名之间有一个*号;函数体内使用yeild语句来定义不同的内部状态
- 返回 函数执行并不会直接执行,而是返回一个指向内部状态的指针对象
- next() 调用next()函数即会往下执行yield处暂停执行
注: *在function与函数名之间语法都对,但常用以下表示方法[*跟在function后面]
fucntion* helloworldGenerator() {
// some logic code
yield 'hello'
// other logic code
return 'end';
}
var hw = helloworldGenrator();
next()
- 可以携带一个参数 ->该参数会被当做上一个yield语句的返回值
for...of
- for...of 循环可以自动遍历Generator函数,且此时不再需要调用next方法
- 且return不包含在for...of的值当中
function *fo() {
yield 1;
yield 2;
yield 3;
yield 4;
return 5;
}
var fov = fo();
for( var v of fov) {
console.info(v); //1 2 3 4
}
Generator.prototype.throw()
- 函数体外抛出错误-Generator函数体内捕获
Generator.prototype.return()
- return()可以返回一个给定的值
- 同时终结Generator函数
- 当如果内部有try...finally代码块,会推迟到finally代码执行完后在执行
yield*
- 默认Generator函数内部调用另一个Generator函数,是没有效果的
- 处理方式:用yield*语句用来在一个Generator函数里面执行另一个Generator函数
Generator的this
- Generator 函数总是返回一个遍历器; ES6规定这个遍历器是Generator函数的实例,也继承了Generator的函数的prototype对象上的方法