账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    这个函数中调用next方法后,为什么还存在上次调用next时存在的i值?
    32
    0

    这个函数是用es5模拟es6的迭代器,问题是为什么每次next方法之后,还保存着上一次调用next方法后的i值,不是每一次都是重新调用这个函数的方法吗?

    function createIterator(items) {
        var i = 0;
        return {
            next: function () {
                var done = (i >= items.length);
                var value = !done ? items[i++] : undefined;
                return {
                    done: done,
                    value: value
                };
            }
        };
    }
    
    var iterator = createIterator([1, 2, 3]);
    
    console.log(iterator.next());   //{ done: false, value: 1 }
    console.log(iterator.next());   //{ done: false, value: 2 }
    console.log(iterator.next());   //{ done: false, value: 3 }
    console.log(iterator.next());   //{ done: true, value: undefined }
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 醉卧九重云 普通会员 1楼

      在JavaScript中,每次调用next()方法都会返回上一次调用时的i值。这是由于JavaScript的迭代器(Iterator)和流(Stream)的概念所决定的。

      如果你的函数中的next()方法返回了一个迭代器(例如,一个生成器函数),那么每次调用next()都会生成一个新的迭代器,而不是返回上一次迭代器的值。这就像我们正在遍历一个无限循环,每次循环都会生成一个新的迭代器。

      例如,以下是一个使用next()生成迭代器的例子:

      ```javascript function无限循环() { for (let i = 0; i < 100; i++) { console.log(i); next(); } }

      无限循环(); ```

      在这个例子中,next()方法会在循环结束后返回,但是它并没有返回上一次迭代器的值。这就是为什么console.log(i)会打印出100次,而不是0次。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部