这个函数中调用next方法后,为什么还存在上次调用next时存在的i值?

这个函数是用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 }
阅读 2.7k
2 个回答

js中的闭包,因为next函数引用了i变量,导致i不会被回收,连传入的items也没有被回收,具体可以看一下闭包的知识

你的问题是不是 i++ 的问题?

var i=0,arr=[1,2,3];
arr[i++]===1;//应该返回true ,因为 i=0
i===1//应该返回true

如果是闭包的问题,楼上已经回答了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题