在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 這個函數(shù)中調(diào)用next方法后,為什么還存在上次調(diào)用next時存在的i值?

這個函數(shù)中調(diào)用next方法后,為什么還存在上次調(diào)用next時存在的i值?

這個函數(shù)是用es5模擬es6的迭代器,問題是為什么每次next方法之后,還保存著上一次調(diào)用next方法后的i值,不是每一次都是重新調(diào)用這個函數(shù)的方法嗎?

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 }
回答
編輯回答
不二心

js中的閉包,因為next函數(shù)引用了i變量,導(dǎo)致i不會被回收,連傳入的items也沒有被回收,具體可以看一下閉包的知識

2018年1月7日 11:23
編輯回答
赱丅呿

你的問題是不是 i++ 的問題?

var i=0,arr=[1,2,3];
arr[i++]===1;//應(yīng)該返回true ,因為 i=0
i===1//應(yīng)該返回true

如果是閉包的問題,樓上已經(jīng)回答了。

2017年9月27日 13:57