Generator

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对象上的方法
原文地址:https://www.cnblogs.com/pengsn/p/12867113.html