这个函数中调用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 }


慕少森
浏览 590回答 2
2回答

LEATH

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

MYYA

你的问题是不是 i++ 的问题?var i=0,arr=[1,2,3];arr[i++]===1;//应该返回true ,因为 i=0i===1//应该返回true如果是闭包的问题,楼上已经回答了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript