Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does `return function *(){...}` mean? [duplicate]

I saw something strange in Koa. It has some new function names (from 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('');   } }); 

What does return function *() mean? Can we declare a function with the name of * in JavaScript?

like image 466
Afshin Mehrabani Avatar asked Nov 07 '13 10:11

Afshin Mehrabani


2 Answers

It means that the function returns an iterator (so it can be repeatedly called with .next() to yield more values.

check out http://wingolog.org/archives/2013/05/08/generators-in-v8 for more info

It's an ES6 construct, so at the moment you see it more in node rather than client side js

like image 110
benjaminbenben Avatar answered Oct 02 '22 09:10

benjaminbenben


Koa makes use of a new JavaScript feature called generators, and the * is the way to identify a generator in V8.

like image 24
Luc Morin Avatar answered Oct 02 '22 08:10

Luc Morin