js
// items 被迭代的数组 返回用于迭代的next函数
function createIterator(items) {
let i = 0;
function next() {
// 如果达到数组长度,则已经完成迭代
let done = i >= items.length;
// 达到数组长度返回undefined,否则返回下一个值
let value = !done ? items[i++] : undefined;
return {
done: done,
value: value
};
}
return { next };
}
const iterator = createIterator([1,2]);
iterator.next(); // "{ value: 1, done: false }"
iterator.next(); // "{ value: 2, done: false }"
iterator.next(); // "{ value: 3, done: true }"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
这一例子中可以说 next()
函数 和 i
构成了闭包,同时也产生了副作用:每执行一次 next()
i
就会加 1。