π iterable, iterator
μ΄ν°λ¬λΈμ [forβ¦of], [μ κ° μ°μ°μ], [λΉκ΅¬μ‘°ν] ..λ±, μ΄ν°λ¬λΈμ΄λ μ΄ν°λ μ΄ν° νλ‘ν μ½μ λ°λ₯΄λ μ°μ°μλ€κ³Ό ν¨κ» λμνλλ‘ νλ μ½μλ κ·μ½μ μλ―Ένλ€.
μ΄ν°λ¬λΈμ μ΄ν°λ¬λΈ κ·μ½μ λ°λ₯΄λ κ°μ²΄
βοΈ iterable
μ΄ν°λ μ΄ν°λ₯Ό 리ν΄νλ Symbol.iterator λ©μλλ₯Ό κ°μ§ κ°μ²΄
λ°°μ΄μ κ²½μ° Array.prototype μ Symbol.iterator λ₯Ό μμλ°κΈ° λλ¬Έμ μ΄ν°λ¬λΈμ
βοΈ iterator
{value : κ° , done : true/false} ννμ μ΄ν°λ μ΄ν° κ°μ²΄λ₯Ό 리ν΄νλ next() λ©μλλ₯Ό κ°μ§ κ°μ²΄.
next λ©μλλ‘ μν ν μ μλ κ°μ²΄λ€. Symbol.iterator μμ μ μ λμ΄μλ€.
next() λ
1
2
3
4
5
6
7
8
9
10
11
12
13
function* gen() {
yield 1;
yield 2;
yield 3;
}
//{ value : κ° , done : κ°μ΄ μμΌλ©΄ true}
const g = gen(); // "Generator { }"
g.next(); // "Object { value: 1, done: false }"
g.next(); // "Object { value: 2, done: false }"
g.next(); // "Object { value: 3, done: false }"
g.next(); // "Object { value: undefined, done: true }"
ννλ‘ μ΄λ£¨μ΄μ§
iterable => Symbol.iterator => iteratorκ° => next()λ‘ μνκ°λ₯
νλ§λλ‘ iterableμ λ°λ³΅κ°λ₯ν κ°μ²΄μ΄κ³ iteratorλ κ·Έμμ λ°λ³΅μ μννλ λ©μλλΌκ³ μκ°νλ©΄ λ κ±°κ°λ€.