什么`返回函数*(){…}`是什么意思?

我在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中声明一个名称为*的函数吗?

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

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

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

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