ES6 Generator 相关

Generator

含义:一种异步编程解决方案

形式:,Generator 函数是一个普通函数,但是有两个特征。

一是,function关键字与函数名之间有一个星号;

二是,函数体内部使用yield表达式,定义不同的内部状态

function 后面的星号没有规定写在哪里,所以以下4种方式都是等效的

function* base(){}

function * base(){}

function *base(){}

function*base(){}

function* base() {

yield \‘base1\‘;

yield \‘base2\‘;

yield \‘base3\‘;

return \‘end\‘;

}

调用方式:调用结束后继续调用返回undefined

let b = base();

console.log(b.next());//{value: \"base1\", done: false}

console.log(b.next());//{value: \"base2\", done: false}

console.log(b.next());//{value: \"base3\", done: false}

console.log(b.next());//{value: \"end\", done: true}

console.log(b.next());//{value: \"undefined\", done: true}

调用方式看起来像断点调试的形式

yield关键字

在函数中,yield类似于暂停操作,即运行到这里就暂停。

只有当调用next()方法才进行下一步,知道遇到下一个yield。

若未遇到yield则一直运行到最后。直到return结束。

如果没有return,则最后会返回undefined。

next()方法

function * NumberMath(x) {

let a = 2 * (yield x);

let b = yield (a+10);

return (a+b+x);

}

let num = NumberMath(10);

console.log(num.next());//{value: 10, done: false}

console.log(num.next());//{value: NaN, done: false}

console.log(num.next());//{value: NaN, done: true}

console.log(num.next());//{value: undefined, done: true}

let num = NumberMath(10);

console.log(num.next());//{value: 10, done: false}

console.log(num.next(10));//{value: 30, done: false}

console.log(num.next(10));//{value: 40, done: true}

console.log(num.next());//{value: undefined, done: true}

所以得出结论,next的参数讲替代yield表达式。

yield*表达式,用来在一个 Generator 函数里面执行另一个 Generator 函数

function* foo() {

yield \‘e\‘;

yield \‘l\‘;

yield \‘l\‘;

}

function* bar() {

yield \‘h\‘;

yield *foo();

yield \‘o\‘;

}

for (let v of bar()){

console.log(v);//h e l l o

}

时间: 2024-10-20 18:06:35

ES6 Generator 相关的相关文章

es6 generator 函数中的yield理解

es6 generator 的yield理解 原文地址:https://www.cnblogs.com/malong1992/p/12129561.html

ES6 Generator 学习笔记一

Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. Generator 函数有多种理解角度.从语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态.  执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数.返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态. 形式上,Generator 函数是一个普通函数,但是有两个特征.一是,f

ES6 Generator函数

Generator函数是es6提供的解决异步编程的方案之一:Generator函数是一个状态机,内部封装了不同状态的数据: <script type="text/javascript"> // generator定义 function后面跟个*号 function* myGenerator(){ console.log('业务逻辑A') let result=yield 'hello' console.log(result) console.log('业务逻辑B') yie

ES6的相关信息

ECMAScript 是什么? ECMAScript 是 Javascript 语言的标准.ECMA European Computer Manufactures Association(欧洲计算机制造商协会),主要任务是研究信息和通讯技术方面的标准并发布有关技术报告.ECMAScript6:简称 ES6,是 JavaScript 语言的下一代标准,也是目前正是发布的最新JavaScript 标准,由于 ES6 是在 2015 年发布,所以 ES6 也成为 ECMAScript2015. 运行

ES6的相关新属性

1.class……extends es6中的class与es5 中的function差不多: class Student extends People , student  继承了people父类: 2.let与var的区别 let声明块级变量,不知道下文变量的设置. 3.es6中的module导入与导出 import……from…… 导入模块 export * from 'src/other_module'; export { foo, bar } from 'src/other_module

ES6字符串相关扩展

变量的解构赋值 // 数组的解构赋值 let [a,b,c] = [1,2,3]; //1,2,3 let [a,b,c] = [,123,]; //undefined 123 undefined let [a=111,b,c] = [,123,]; //111 123 undefined console.log(a,b,c); 对象的解构赋值 let {foo,bar} = {foo : 'hello',bar : 'hi'};//hello hi let {foo,bar} = {bar :

ES6 - Generator生成器

Generator 函数有多种理解角度.语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态. 执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数.返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态. Generator 函数是一个普通函数,但是有两个特征.一是,function关键字与函数名之间有一个星号:二是,函数体内部使用yield表达式,定义不同的内部状态(yi

深入解析js异步编程利器Generator

我们在编写Nodejs程序时,经常会用到回调函数,在一个操作执行完成之后对返回的数据进行处理,我简单的理解它为异步编程. 如果操作很多,那么回调的嵌套就会必不可少,那么如果操作非常多,那么回调的嵌套就会变得让人无法忍受了. 我们知道的Promises就是问了解决这个问题而提出来的.然而,promises并不是一种新的功能,它只是一种新的写法,原来横向发展的回调函数,被排成了队竖向发展. 然而,Generator不同,它是一种新的解决方案. 文章中提到的所有代码都可以在这里找到源码:[查看源码].

Generator实质

Generator实质 来源: <http://blog.liuwanlin.info/generatorshi-zhi/> superlin ?  September 15, 2015 ? 1 Comment ES6里面最有意思,也是最有用的除了Promise之外就是Generator了,关于Generator的规范也是看了有一段时间了,今天想起来还是写一写这部分的内容. 用一句简单的话来概括Generator的核心技术的话,那就是:将EC保存起来,每次执行代码的时候恢复EC,这样一个函数里