【问题标题】:when we write for..of loop how does it internally call symbol.iterator [duplicate]当我们编写 for..of 循环时,它如何在内部调用 symbol.iterator [重复]
【发布时间】:2019-03-05 00:55:46
【问题描述】:

考虑一下这段代码。

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]的函数的?

【问题讨论】:

  • how does it internally call symbol.iterator - 显而易见的答案是......内部......为什么它的调用方式很重要?

标签: javascript for-of-loop


【解决方案1】:

您可以通过替换 [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)
}

【讨论】:

    【解决方案2】:

    很好的问题,实际上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);
    }
    

    更多信息请阅读the Docs

    【讨论】:

    • "实际上 for of 循环处理程序是映射到具有内置迭代器和参数的 for 循环处理程序上的," - 你能详细说明一下吗?
    • 你的 sn-p 中的代码与问题有什么关系? OP 询问的是 for … of 循环,而不是数组扩展语法。
    • 当然,亲爱的@Bergi,他 for of 循环处理程序被映射到 for 循环处理程序,带有内置的迭代器和参数。因此,for ... of 内部有一个常规的for。容易。
    • 你已经说过了。 如何你认为它是如何映射的?
    • @Bergi,请不要选择我的简单词,mapped 可能对您有不同的含义。我之前解释过。有关更多信息,请阅读 MDN 文档。谢谢。
    猜你喜欢
    • 2017-03-30
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多