当前位置: 首页 > 面试题库 >

JavaScript中的“功能*”是什么?

毛博
2023-03-14
问题内容

在此页面中,我找到了新的JavaScripthtml" target="_blank">函数类型:

// NOTE: "function*" is not supported yet in Firefox.
// Remove the asterisk in order for this code to work in Firefox 13

function* fibonacci() { // !!! this is the interesting line !!!
    let [prev, curr] = [0, 1];
    for (;;) {
        [prev, curr] = [curr, prev + curr];
        yield curr;
    }
}

我已经知道了什么yieldlet以及[?,?]=[?,?]做的,但不知道什么function*是注定的。它是什么?


问题答案:

这是一个生成器功能。

生成器是可以退出并稍后重新输入的函数。它们的上下文(变量绑定)将在重新进入时保存。

调用生成器函数不会立即执行其主体。而是返回该函数的迭代器对象。next()调用迭代器的方法时,将执行生成器函数的主体,直到第一个yield表达式指定要从迭代器返回的值,或者使用yield*,将其委托给另一个生成器函数。

历史记录:

这是的建议语法EcmaScript.next

Mozilla的Dave Herman谈到了EcmaScript.next。在30:15他谈到了发电机。

之前,他解释了Mozilla如何通过实验方式实施建议的语言更改以帮助指导委员会。Dave与Mozilla的CTO(我认为)和原始JavaScript设计师BrendanEich紧密合作。

工作组(TC-39)普遍同意EcmaScript.next应该具有某种生成器迭代器建议,但这不是最终的。

如果不更改该语言的下一个版本,则不应依靠它来显示,即使它没有变化,也有一段时间不会在其他浏览器中广泛显示。

总览

一流的协程,表示为封装暂停的执行上下文(即函数激活)的对象。现有技术:Python,Icon,Lua,Scheme,Smalltalk。

例子

斐波纳契数的“无限”序列(尽管行为在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


 类似资料:
  • 问题内容: 我在几个地方读到,主要的区别是“ 在箭头函数中按词法绑定”。一切都很好,但是我实际上不知道那意味着什么。 我知道这意味着它在定义函数主体的大括号范围内是唯一的,但是我实际上无法告诉您以下代码的输出,因为我不知道所指的是什么,除非它指的是胖箭头函数本身…。似乎没有用。 问题答案: 箭头函数捕获封闭上下文的值 因此,要直接回答您的问题,箭头函数内部的值将与分配箭头函数之前的值相同。

  • 问题内容: 我们经常看到如下: 有什么功能? 问题答案: DOCTYPE的最主要用途是在Quirks模式和Standards模式渲染之间切换浏览器。 出现此功能的原因是IE的旧版本中的“残破”渲染。人们认识到,如果Microsoft仅“修复”了IE呈现引擎,则许多现有站点将无法正确呈现。因此,它的工作方式是,如果您在页面中完全放置了_任何_有效的DOCTYPE声明,则假定您知道自己在做什么,并且浏

  • 问题内容: 我正在尝试通过阅读原始规范来围绕ES6中新的标准化块级功能进行研究。我的肤浅理解是: ES6中允许块级函数声明。 他们吊在街区的顶部。 在严格模式下,它们在包含块之外不可见。 但是,由于这些语义的一部分被指定为“可选”且仅对于Web浏览器是强制性的(附件B),这使情况进一步复杂化。所以我想填写下表: 我也不清楚在这种情况下“严格模式”是什么意思。这种区别似乎在附件B3.3中引入,作为在

  • 问题内容: 我发现某些jQuery插件在其css规则中使用“ zoom”描述符,我什至查看w3c网站,也发现它用于放大,但是我实际上如何实现呢?还是我必须定义一些视口?以及如何定义这样的视口?还是我对整个事情都错了? 有可能像这样使用它吗 问题答案: CSS规范中未包含缩放功能,但IE,Safari4,Chrome支持缩放功能(从3.5开始,您可以在Firefox中获得类似的效果)。 因此,所有浏

  • 本文向大家介绍JSP中 操作的功能是什么?,包括了JSP中 操作的功能是什么?的使用技巧和注意事项,需要的朋友参考一下 通过此操作,您可以将文件插入到正在生成的页面中。语法看起来像这样- 与include指令不同,include指令在将JSP页面转换为servlet时插入文件,而该动作则在请求页面时插入文件。 下表列出了与include操作相关联的属性- 序号 属性和说明 1 page 要包含的页

  • 在Java8中,新的包是Java。util。函数包含很多函数接口。该软件包的文档(http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html)多次提到“函数形状”: 有几种基本函数形状,包括函数(从T到R的一元函数)、消费者(从T到void的一元函数)、谓词(从T到布尔的一元函数)和供应者(从T到