我在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中声明一个名为*
的函数吗?
答案 0 :(得分:34)
这意味着该函数返回一个迭代器(因此可以使用.next()重复调用它以产生更多值。
查看http://wingolog.org/archives/2013/05/08/generators-in-v8了解详情
这是一个ES6构造,所以目前你在节点而不是客户端js中看到它更多
答案 1 :(得分:18)
Koa使用名为 generators 的新JavaScript功能,*
是在V8中识别生成器的方法。