chatGPT:
JavaScript의 yield는 제너레이터 함수(generator function) 내에서 사용되는 키워드로, 함수의 실행을 일시 중단하고 중간 결과를 반환한 뒤, 이후 다시 호출되면 중단했던 지점부터 실행을 재개하는 데 사용됩니다. 제너레이터는 ES6(ECMAScript 2015)에서 도입된 기능입니다.
function* generatorFunction() {
yield value;
}
function* simpleGenerator() {
yield 1;
yield 2;
yield 3;
}
const gen = simpleGenerator();
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: 3, done: false }
console.log(gen.next()); // { value: undefined, done: true }
function* countUpTo(limit) {
for (let i = 1; i <= limit; i++) {
yield i;
}
}
const counter = countUpTo(5);
console.log(counter.next().value); // 1
console.log(counter.next().value); // 2
console.log(counter.next().value); // 3
console.log(counter.next().value); // 4
console.log(counter.next().value); // 5
console.log(counter.next().value); // undefined
yield 표현식은 next() 메서드에서 전달된 값을 받을 수도 있습니다.
function* dynamicGenerator() {
const x = yield "Enter a value:";
console.log(`Received: ${x}`);
const y = yield "Enter another value:";
console.log(`Received: ${y}`);
return x + y;
}
const gen = dynamicGenerator();
console.log(gen.next()); // { value: 'Enter a value:', done: false }
console.log(gen.next(10)); // { value: 'Enter another value:', done: false }, logs 'Received: 10'
console.log(gen.next(20)); // { value: undefined, done: true }, logs 'Received: 20'