Using for..of statement:

function* greeting(){
console.log(`Generators are "lazy"`);
yield "How";
console.log(`I'm not called until the second next`);
yield "are";
console.log(`Call me before "you"?`);
yield "you";
console.log(`Called when "done"`);
} let greeter = greeting();
for(word of greeter){
console.log(word);
} //How
//are
//you

You can see, it ouptu "How are you", because it grabs the value off of the next.

The same as:

let greeter = greeting();
console.log(greeter.next().value);
console.log(greeter.next().value);
console.log(greeter.next().value);
console.log(greeter.next().value);

Assign the yield to the variable:

function* greet(){
let friendly = yield "How";
console.log(friendly);
yield "are";
yield "you";
} var greeter = greet();
console.log(greeter.next().value);
console.log(greeter.next().value);
console.log(greeter.next().value); //How
//undefined
//are
//you

When you assign yield to friendly, it doesn't console out "How" but undefined.

Why undefined?:

The way that this works is that the next step through the iteration, so if I say "The heck," will basically send this back through and assign it to this friendly. If I log this out now you'll see I get "How," and then "The heck." That means you can start building things through the iteration process.

Add param to the next():

function* greet(){
let friendly = yield "How";
console.log(friendly);
yield "are";
yield "you";
} var greeter = greet();
console.log(greeter.next().value);
console.log(greeter.next("the hack").value);
console.log(greeter.next().value); //How
//the hack
//are
//you
function* greet(){
let friendly = yield "How";
friendly = yield friendly + "are";
yield friendly + "you?";
} var greeter = greet();
console.log(greeter.next().value);
console.log(greeter.next(" the heck ").value);
console.log(greeter.next(" silly ol'").value); //How
// the heck are
// silly ol you

Cannot pass the param to the first next():

function* greet(){
let friendly = yield "How";
friendly = yield friendly + "are";
yield friendly + "you?";
} var greeter = greet();
console.log(greeter.next("first").value);

It will show error message:

  TypeError: Sent value to newborn generator.

Because you haven't given this a chance to run and iterate and go to the next step where you could actually pass in a value.

总之:yield返回的值是下一个next中所传进来的值

Generators also help you work with infinite sequences:

function* graph(){
let x = 0;
let y = 0;
while(true){
yield {x:x, y:y}
x += 2;
y += 1;
}
} var graphGenerator = graph();
console.log(graphGenerator.next().value);
console.log(graphGenerator.next().value);
console.log(graphGenerator.next().value);
console.log(graphGenerator.next().value);
console.log(graphGenerator.next().value);
console.log(graphGenerator.next().value);
console.log(graphGenerator.next().value);
console.log(graphGenerator.next().value);

I can safely yield this X and Y point knowing confidently that this stuff isn't going to evaluate until the next step through after the yield process.

[ES6] 15. Generators -- 2的更多相关文章

  1. es6(15)--generator

    //generator处理异步,下一步用next,遇到return或者yied就会停止 { //generator基本定义 let tell=function* (){ yield 'a'; yiel ...

  2. ES6新特性概览

    本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...

  3. es6学习笔记入门总结

    1.let const block 作用域 let 代替var 来声明块级作用域,没有变量提升,只在块内有作用 const 可以声明一个常量,类似于指针,指向某一个引用,这个常量并非一成不变的,但是不 ...

  4. ES6 主要的新特性

    本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...

  5. ES6之路

    从工作到现在,虽然是PHP出身,一直都和JS形影不离,从JQ和原生处理页面,到后来被angular1的MVVM模式惊艳到,再到弃angular转战vue,到现在使用react,一路走来,跳坑无数,现在 ...

  6. ES6 一些常用使用

    //1.解构数组 let arr1 = ['apple', 'coffee', 'cake']; let [fruit, drink, dessert] = arr1; console.log(fru ...

  7. Express/Koa/Hapi

    Express/Koa/Hapi 本文翻译自: https://www.airpair.com/node.js/posts/nodejs-framework-comparison-express-ko ...

  8. 【转载】Express、Koa、Hapi框架对比

    中文翻译:http://ourjs.com/detail/5490db1c8a34fa320400000e 英文原文:https://www.airpair.com/node.js/posts/nod ...

  9. Node.js服务端框架谁才是你的真爱

    1. Express 背景: Express, 疯一般快速(而简洁)的服务端JavaScript Web开发框架,基于Node.js和V8 JavaScript引擎. Express 是一个基于 No ...

随机推荐

  1. SQL求 交集 并集 差集

    故事是这样的….. 故事情节: 表 tb_test 有两列, colA , colB; 求 colA , colB 的并交差集… -- 计算并集 SELECT DISTINCT colB FROM t ...

  2. Matlab命令——目录操作(windows&Linux)

    Matlab命令——目录操作(windows&Linux) 1. filesep用于返回当前平台的目录分隔符,Windows是反斜杠(\),Linux是斜杠(/).有时此命令结合ispc命令使 ...

  3. C#开源框架(整理)

    http://www.cnblogs.com/chinanetwind/p/3715809.html http://www.cnblogs.com/chinanetwind/p/3715813.htm ...

  4. 【LeetCode】237 & 203 - Delete Node in a Linked List & Remove Linked List Elements

    237 - Delete Node in a Linked List Write a function to delete a node (except the tail) in a singly l ...

  5. 搞JAVA在北京月薪15K的朋友来到厦门却很难找到工作

    朋友是搞JAVA开发的,从北京来.来前朋友们都感觉他在厦门应该很快就能找到工作,因为厦门的IT人员很缺. 没想到来厦门大概半个多月了,到现在都还没着落.面试单位每周基本只有两家,而且面试的感觉都说不错 ...

  6. 一起来画画!8款最佳HTML5绘图工具

    HTML5无疑是当前最受宠的一项技术,今天推荐8款HTML5绘图工具,同样惊艳你的眼球!这些绘图工具大多数是用HTML5画布(Canvas)实现的,部分辅以Javascript.对每一个web设计者来 ...

  7. Struts Convention Plugin 流程 (2.1.6+)

    首先添加lib: <dependency> <groupId>org.apache.struts</groupId> <artifactId>strut ...

  8. LeetCode(2) - Add Two Numbers

    一道比较基本的LinkedList的题目.题目要求是这样,现在有两个LinkedList,(2  -> 4 -> 3)和(5 -> 6 -> 4),然后从头开始,把每个node ...

  9. unigui 导入导出数据

    导入:首先要用TUniFileUpload将文件从客户端上传至服务端,然后完成导入. TUniFileUpload上传文件的演示代码: UniFileUpload1.Execute; UniFileU ...

  10. 埃氏筛法(快速筛选n以内素数的个数)

    给你一个数n,请问n以内有多少个素数?(n <= 10e7) 一般来说,要是对一个整数进行素数判断,首先想到的是写个函数判断是否为素数,然后调用这个函数,时间复杂度为O(n^(½)),但是要求n ...