看到generator又叫生成器的东西当是有点熟悉是个什么GUI,现在明白了
原来是参考Python做的。就像一个迭代器。
例如,它能实现一个短短几句能容纳所有整数的函数,每调用一次都产生一个整数。相对于类来说,简单易用。相对与直接返回数组来说,节省空间。
作用
暂停,返回,下次继续从上次的地点开始,不懂?看下面例子
语法
//注意前面有个*
function* foo(var) {
yeild var + 0;
yield var + 1;
yield var + 2;
yield var + 3;
}
调用方法
两种
var f = foo(0);
f.next(); // {value: 0, done: false}
f.next(); // {value: 1, done: false}
f.next(); // {value: 2, done: false}
f.next(); // {value: 3, done: true}
f.next(); //异常,嫌手动控制麻烦?换下一种方法吧
另一种常用方法:
for(let n in foo(0)) console.log(n);//不会抛异常
小事
对于yield的要求代码中有yield就编译器就认为该函数是个generator,即使不可到达。
遇到return 或者末端终止,如果继续next()方法将抛出一个StopIteration的异常。
好的方法是用一个循环来实现:
function* How(limit x)
{
var n=0;
while(n<x)
{
yield ++n;
}
//return 可写可不写
}
//问题来了,以下会输出什么?
for(let n in How(2))
{
console.log(n);
}
不知道答案,就试试
希望每天都能收获新知
2016年10月26日星期三 12:41