【问题标题】:What does star (*) mean in JavaScript function definition in Koa framework? [duplicate]Koa 框架中 JavaScript 函数定义中的星号 (*) 是什么意思? [复制]
【发布时间】:2014-06-18 20:34:16
【问题描述】:

我一直在熟悉 Koa (http://koajs.com/)。许多示例使用星号代替函数名。例如,在 hello world 示例中有:

var koa = require('koa');
var app = koa();

app.use(function *(){
  this.body = 'Hello World';
});

app.listen(3000);

这颗星是什么意思?

【问题讨论】:

标签: javascript ecmascript-harmony koa


【解决方案1】:

它通常会创建一个“迭代器”,因此您可以一次生成一个结果。
类似于 C# 的 yield 关键工作。

Official Information

示例

斐波那契数列的“无限”序列(尽管行为在 2^53 左右):

function* fibonacci() {
    let [prev, curr] = [0, 1];
    for (;;) {
        [prev, curr] = [curr, prev + curr];
        yield curr;
    }
}

生成器可以循环迭代:

for (n of fibonacci()) {
    // truncate the sequence at 1000
    if (n > 1000)
        break;


  print(n);
}

生成器是迭代器:

let seq = fibonacci();
print(seq.next()); // 1
print(seq.next()); // 2
print(seq.next()); // 3
print(seq.next()); // 5
print(seq.next()); // 8

【讨论】:

  • 嘿,这有点酷
  • 这太棒了,谢谢!你会不会碰巧知道为什么语法是*?例如。您需要明确定义某物是生成器的原因是什么?例如,在 Python 中,您不需要这样做。
  • 对不起,我不知道..
  • 虽然这是一个 100% 有效的答案,但仍然不清楚这段代码中生成器的用途是什么——为什么我们需要生成器来分配 this.body = 'Hello World?';
  • 在 Python 中,我相信“yield”运算符的存在决定了您是否创建了函数或生成器。在 Javascript 中这是明确的。
猜你喜欢
  • 1970-01-01
  • 2011-05-09
  • 2010-09-28
  • 2016-12-15
  • 2014-07-28
  • 2018-11-21
  • 2019-02-09
  • 1970-01-01
  • 2015-11-04
相关资源
最近更新 更多