当我们编写for.of循环时,它如何在内部调用symbol.iterator



请考虑此代码。

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);
}

有关更多信息,请阅读文档

最新更新