56

我在Koa中看到了一些奇怪的东西。它有一些新的函数名称(来自https://github.com/koajs/koa/blob/master/examples/co.js#L10):

app.use(function(){
  return function *(){
    var paths = yield fs.readdir('docs');

    var files = yield paths.map(function(path){
      return fs.readFile('docs/' + path, 'utf8');
    });

    this.type = 'markdown';
    this.body = files.join('');
  }
});

是什么return function *()意思?*我们可以在 JavaScript 中声明一个名称为 的函数吗?

4

2 回答 2

35

这意味着该函数返回一个迭代器(因此可以使用 .next() 重复调用它以产生更多值。

查看http://wingolog.org/archives/2013/05/08/generators-in-v8了解更多信息

它是一个 ES6 结构,所以目前你在节点而不是客户端 js 中看到它更多

于 2013-11-07T10:52:20.510 回答
17

Koa 使用了一个名为generators的新 JavaScript 特性,这*是在 V8 中识别生成器的方法。

于 2013-11-07T10:51:35.320 回答