首页 > 试题广场 >

执行以下代码,下列选项中,说法正确的是()

[单选题]
执行以下代码,下列选项中,说法正确的是()
function * gen() {
    yield 1;
    yield 2;
    yield 3;
}

  • gen()执行后返回2
  • gen()执行后返回undefined
  • gen()执行后返回一个Generator对象
  • gen()执行后返回1
执行函数会返回一个generator的_proto_
发表于 2021-07-30 20:15:05 回复(0)
genareter包括yeild前面同步代码也要用next执行
发表于 2021-04-01 13:20:25 回复(0)
执行后返回generator应该没错,由于使用yield暂停了,所以是不可能打印出abd其中一个答案的,应该是使用next()方法,跟执行gen()没有什么关系
发表于 2020-05-18 09:12:23 回复(0)
C.C头像 C.C
这是ES6的新feature, function 后面带  * 的叫做generator function。函数运行时,返回一个迭代器
编辑于 2016-02-26 20:33:07 回复(5)

function*声明 (function关键字后跟一个星号)定义了一个 生成器函数 ( generator function ),它返回一个  Generator  对象。

也可以定义  生成器函数  使用构造函数  GeneratorFunction 和一个  function* expression
编辑于 2017-03-26 16:57:22 回复(0)
廖雪峰老师将的挺详细,参考链接:https://www.liaoxuefeng.com/wiki/1022910821149312/1023024381818112

发表于 2020-07-24 15:47:30 回复(0)
这题答案不对吧,gen()本身是一个生成器,返回的是迭代器对象(iterator)才对吧?
发表于 2018-03-20 12:53:53 回复(1)
会返回一个Iterator实例, 然后再执行Iterator实例的next()方法, 那么这个函数才开始真正运行, 并把yield后面的值包装成固定对象并返回,直到运行到函数结尾, 最后再返回undefined;
发表于 2017-03-29 13:54:08 回复(0)

JavaScript ES6迭代器指南

https://segmentfault.com/a/1190000003021261

编辑于 2016-02-10 11:23:21 回复(0)



可迭代对象, 一个对象必须实现 @@iterator 方法, 意思是这个对象(或者它原型链 prototype chain 上的某个对象)必须有一个名字是 Symbol.iterator 的属性:
当一个对象被认为是一个迭代器时,它实现了一个 next() 的方法并且拥有以下含义:

摘自 MDN
——https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Iteration_protocols
——https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Generator
发表于 2019-02-03 14:56:35 回复(0)
答案不严谨。
调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象,也就是遍历器对象(Iterator Object)。
发表于 2017-07-15 15:41:15 回复(0)
function* 声明 (function关键字后跟一个星号)定义了一个 生成器函数 ( generator function ) ,它返回一个  Generator   对象。
发表于 2017-03-07 19:40:17 回复(0)
等价于async await
async函数就是generator函数的语法糖
async函数就是将generator函数的*换成async, 将yield换成await
知道用法再理解原理就好多了吧
发表于 2021-03-29 15:50:13 回复(0)

gen()返回的是一个迭代器,gen().next()返回的是1


编辑于 2019-01-21 14:47:27 回复(0)
不会
发表于 2016-09-19 14:47:28 回复(0)
生成器函数有实际应用场景吗,举个例子?
发表于 2022-07-05 12:42:19 回复(0)

C

调用生成器函数会产生一个生成器对象。生成器函数只会在初次调用next()方法之后开始执行。

编辑于 2022-03-09 08:37:53 回复(0)

c


编辑于 2021-09-06 18:24:41 回复(0)
不是只有.next之后才会执行吗
发表于 2021-04-06 09:51:34 回复(0)
ES6怎么那么多,看来要好好学

发表于 2019-05-28 08:33:24 回复(0)