`return function*(){...}`是什么意思?

Afs*_*ani 56 javascript node.js ecmascript-6

我在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('');
  }
});
Run Code Online (Sandbox Code Playgroud)

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

ben*_*ben 34

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

有关详细信息,请访问http://wingolog.org/archives/2013/05/08/generators-in-v8

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


Luc*_*rin 18

Koa使用了一个名为generator的新JavaScript功能,这*是在V8中识别生成器的方法.