zoukankan      html  css  js  c++  java
  • 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对象上的方法
  • 相关阅读:
    java面试题总汇
    数据库sql语句规则
    docker安装redis(网上很多答案都是错误的,小心误入歧途!)
    docker 安装redis后,可视化工具无法连接
    Session
    #{}和${}区别
    axios和ajax区别
    Git使用
    Git常用命令
    如何简单粗暴的搞定dubbo调用模块
  • 原文地址:https://www.cnblogs.com/pengsn/p/12867113.html
Copyright © 2011-2022 走看看