吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 618|回复: 11
收起左侧

[求助] 关于js里Generator函数yield*的疑问

[复制链接]
云烟成雨 发表于 2022-7-29 21:13
本帖最后由 云烟成雨 于 2022-8-1 10:27 编辑

https://www.runoob.com/w3cnote/es6-generator.html


Generator函数,菜鸟上面yield* 表达式  的示例会报错,那个等同于会报错,而且那个next的值为什么会传到第二个函数里,有点不理解,
谁能解释一下,并修复一下那个等同于那里的bug?


具体代码如下:
[JavaScript] 纯文本查看 复制代码
function* callee() {
    console.log('callee: ' + (yield));
}

// 等同于
function* caller() {
    while (true) {
        for (var value of callee) {
            yield value;
        }
    }
}

const callerObj = caller();
callerObj.next();
callerObj.next("a");
callerObj.next("b");


报错:Uncaught TypeError: callee is not iterable
改成callee()后不报错了,但是next的值无法传递过去了,他这个等同于好像并没有完全等同,还有什么等同的方法吗?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hulan 发表于 2022-7-29 21:49
测试没有报错,你那边报什么错?
d199212 发表于 2022-7-30 08:18
报 callee is not defined?如果是的话,那你得把最上面的callee函数要一起搬过去才行
 楼主| 云烟成雨 发表于 2022-7-30 11:32
d199212 发表于 2022-7-30 08:18
报 callee is not defined?如果是的话,那你得把最上面的callee函数要一起搬过去才行

搬过去了的,不是报未定义,是报的非迭代对象
 楼主| 云烟成雨 发表于 2022-7-30 11:36
hulan 发表于 2022-7-29 21:49
测试没有报错,你那边报什么错?

那是因为你就没替换啊,上面说等同于,就是说那个函数要替换上去的,你直接复制源代码没报错是因为下面那个函数根本就没运行啊,你要替换上去才行,不然只定义未运行。我刚把代码贴上去了
 楼主| 云烟成雨 发表于 2022-7-30 11:37
d199212 发表于 2022-7-30 08:18
报 callee is not defined?如果是的话,那你得把最上面的callee函数要一起搬过去才行

我刚把代码贴上去了,你看一下
boxer 发表于 2022-7-30 12:17
Generator函数本身并不是可迭代对象, 它是用来生成可迭代对象的, 也就是你需要调用它
等同于 是说相当于那样的执行机理,并不是完全等价, for in只是遍历里面的数据并没有输入参数给他,因此无法完全等价, 也就是无法像上面那样通过next传入参数给它
wzh123456789 发表于 2022-7-30 13:47
如果你知道携程那你应该就明白了
npc404 发表于 2022-7-30 15:39
看报错信息啊,明显是for (var value of callee)这行代码里callee错了,没有调用,要调用才会返回一个迭代器
unmask 发表于 2022-7-31 09:32
line8:for (var value of callee) {
callee后面需要加(),让callee返回iterable对象。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-8 19:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表