web-dev-qa-db-ja.com

`return function *(){...}`はどういう意味ですか?

Koa で奇妙なものを見ました。いくつかの新しい関数名があります( https://github.com/koajs/koa/blob/master/examples/co.js#L1 から):

_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で_*_という名前の関数を宣言できますか?

57

これは、関数が反復子を返すことを意味します(したがって、.next()で繰り返し呼び出して、より多くの値を取得できます)。

http://wingolog.org/archives/2013/05/08/generators-in-v8 をご覧ください

これはES6コンストラクトであるため、現時点では、クライアント側のjsではなく、ノードでより多く表示されます。

34
benjaminbenben

Koaはgeneratorsと呼ばれる新しいJavaScript機能を使用し、*は、V8でジェネレーターを識別する方法です。

18
Luc Morin