请问老师我下面的代码怎么回陷入死循环,是哪里错了

请问老师我下面的代码怎么回陷入死循环,是哪里错了

// 有length和索引属性的对象
        const obj = {
            0: "Elisha",
            1: 18,
            length: 2
        };

        obj[Symbol.iterator] = () => {
            let index = 0;
            return {
                next() {
                    let value, done;
                    if (index < obj.length) {
                        value = obj[index];
                        done = false;
                    } else {
                        value: undefined;
                        done: true;
                    }

                    index++;

                    return {
                        value,
                        done
                    };
                }
            };
        };

        for (const item of obj) {
            console.log(item);
        }


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2022-03-27 11:01:54

同学你好,else语句中设置value和done的值代码书写有误,导致陷入死循环,建议修改:

https://img1.sycdn.imooc.com//climg/623fd37c09c7d46f05140644.jpg

祝学习愉快~

  • 提问者 Elisha666 #1

    为什么写成冒号会陷入死循环呢

    2022-03-27 12:48:07
  • 好帮手慕慕子 回复 提问者 Elisha666 #2

    因为iterator迭代器底层源码内部的实现逻辑是:只有done值为true时才表示迭代完毕, 但是else {} 这里的花括号,对应的是else语句,并不是一个对象,所以使用对象中 属性:值 的写法,并不会给value和done重新赋值,导致done一直是false,无法结束迭代,陷入了死循环。

    祝学习愉快~

    2022-03-27 13:53:16
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师