Подтвердить что ты не робот

Что означает `return function *() {...}` mean?

Я увидел что-то странное в 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?

4b9b3361

Ответ 1

Это означает, что функция возвращает итератор (поэтому его можно многократно вызывать с помощью .next(), чтобы получить больше значений.

просмотрите http://wingolog.org/archives/2013/05/08/generators-in-v8 для получения дополнительной информации

Это конструкция ES6, поэтому на данный момент вы видите ее больше в node, а не на стороне клиента js

Ответ 2

Koa использует новую функцию JavaScript, называемую генераторами, а * - способ идентифицировать генератор в V8.