请考虑此代码。
let array = [1,2,3,4,5]
for(let elem of array) {
console.log(elem)
}
从这里开始,我不是在调用类似array[Symbol.iterator]().since
我们只能通过在评估其值的表达式后面加上括号来执行函数。 在这里,我们只是在写for(let elem of array)
它如何执行名为array[Symbol.iterator]
的函数
您可以通过替换[Symbol.iterator]
来简单地测试它,看看会发生什么:
let array = [1,2,3,4,5]
array[Symbol.iterator] = function* () {
yield *['Larry', 'Mo', 'Curley'];
};
for(let elem of array) {
console.log(elem)
}
好问题,实际上for of
循环处理程序映射到具有内置迭代器和参数for
循环处理程序上,为了更好地理解和使用[Symbol.iterator]
您可以像以下代码一样轻松测试它:
const iterable1 = new Object();
iterable1[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
yield 4;
yield 5;
};
const arr = [...iterable1];
for(let elem of arr) {
console.log(elem);
}
有关更多信息,请阅读文档