Generator
ECMA6 μμ λμ λ ν¨μλ‘μ¨ μ΄ν°λ¬λΈμ μμ±νλ ν¨μμ΄λ€.
μ λλ μ΄ν° ν¨μλ₯Ό μ¬μνλ©΄ μ΄ν°λ μ΄μ νλ‘ν μ½μ μ€μνμ¬ μ΄ν°λ¬λΈμ μμ±νλ λ°©μλ³΄λ€ κ°νΈνκ² μ΄ν°λ¬λΈμ ꡬν ν μ μλ€.
μΌλ°μ μΈ ν¨μμ μ€ν ꡬ쑰μλ λ€λ₯΄κ² ν¨μμ μ½λ λΈλμ νκΊΌλ²μ μ€ννμ§ μκ³ μΌμ μ€μ§ νλ€κ° νμν μμ μ μ¬μμ ν μ μλ νΉμ§μ΄ μλ€.
ν¨μμ μ μ
μ λλ μ΄ν° ν¨μλ function*
ν€μλλ‘ μ μΈνλ€. λν νλμ΄μμ yield
λ¬Έμ ν¬ν¨νλ€.
// μ λλ μ΄ν° ν¨μ μ μΈλ¬Έ
function* genDec() {
yield 1;
}
// μ λλ μ΄ν° ν¨μ ννμ
const genExp = function* () {
yield 1;
};
// μ λ€λ μ΄ν° λ©μλ
const obj = {
* genObjMethod() {
yield 1;
}
}
// μ λ€λ μ΄ν° ν΄λμ€ λ©μλ
const MyClass {
* genClazzMethod() {
yield 1;
}
}
Iterator Interface λ₯Ό ꡬνν νμ₯ν ν¨μ
function* foo() {
yield '첫λ²μ§Έ νΈμΆ';
yield 'λλ²μ§Έ νΈμΆ';
yield 'μΈλ²μ§Έ νΈμΆ';
yield 'λ€λ²μ§Έ νΈμΆ';
}
var _foo = foo();
for (var i = 0; i < 10; ++i) {
console.log(_foo.next());
}
λ€λ²μ§Έ κΉμ§λ§ μ μ λ‘κ·Έκ° μ°νλ©° μ΄νλ‘λ { value: undefined, done: true }
λ‘ λμ¨λ€.
// Object { value: '첫λ²μ§Έ νΈμΆ', done: false }
// Object { value: 'λλ²μ§Έ νΈμΆ', done: false }
// Object { value: 'μΈλ²μ§Έ νΈμΆ', done: false }
// Object { value: 'λ€λ²μ§Έ νΈμΆ', done: false }
// Object { value: undefined, done: true }
// Object { value: undefined, done: true }
// Object { value: undefined, done: true }
// Object { value: undefined, done: true }
// Object { value: undefined, done: true }
// Object { value: undefined, done: true }
yield
μ λλ μ΄ν° ν¨μλ₯Ό μ€μ§ μν€κ±°λ μ¬κ°νλλ° μ¬μ©νλ€.
Syntax
[rv] = yield [expression];
Parameters
- rv
- μ λλ μ΄ν° μ€νμ μ¬κ° νκΈ° μν΄μ, optional valueμ μ λλ μ΄ν°μ
next()
λ©μλλ‘ μ λ¬νμ¬ λ°ν
- μ λλ μ΄ν° μ€νμ μ¬κ° νκΈ° μν΄μ, optional valueμ μ λλ μ΄ν°μ
- expression
- μ λλ μ΄ν° ν¨μμμ μ λλ μ΄ν° νλ‘ν μ½μ ν΅ν΄ λ°νκ°μ μ μ νλ€. (κΈ°λ³Έκ° :
undefined
)
- μ λλ μ΄ν° ν¨μμμ μ λλ μ΄ν° νλ‘ν μ½μ ν΅ν΄ λ°νκ°μ μ μ νλ€. (κΈ°λ³Έκ° :
β Iterable & Iterator Symbol β