为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕少森 2019-03-01 18:23:34
这个函数是用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 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-03-04
?
MYYA

TA贡献1868条经验 获得超4个赞

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


var i=0,arr=[1,2,3];

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

i===1//应该返回true

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


查看完整回答
反对 回复 2019-03-04
  • 2 回答
  • 0 关注
  • 589 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信