Que veut dire `return function * () {…}`?

J’ai vu quelque chose d’étrange dans Koa . Il a quelques nouveaux noms de fonctions ( 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(''); } }); 

Que signifie la return function *() ? Peut-on déclarer une fonction avec le nom de * dans JavaScript?

Cela signifie que la fonction retourne un iterator (il peut donc être appelé à plusieurs resockets avec .next () pour générer plus de valeurs.

consultez http://wingolog.org/archives/2013/05/08/generators-in-v8 pour plus d’informations

Il s’agit d’une construction ES6, de sorte qu’à l’heure actuelle, vous le voyez plus en nœud que côté client js

Koa utilise une nouvelle fonctionnalité JavaScript appelée générateurs , et le * est le moyen d’identifier un générateur dans V8.