一花一世界-JavaScript-generator 必知必会

看到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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值