제네레이터 (generator) - 함수의 실행을 중간에 멈췄다가 재개할 수 있는 기능
// Generator
// .next() .return() .throw()
// yield 로 실행할 순서를 정할 수 있다.
// 처음 .next() 를 통해 다음 yield 전까지 실행
// 중간에 .return('value') 를 통해 value와 done 값을 true로 바꿀수 있다. 그 이후로는 .next()가 먹히지 않는다
// .return 과 마찬가지로 .throw('error') 를 통해 에러 메세지를 출력 가능하고 그후로는 .next()가 먹히지 않는다
// .throw의 경우 try catch 문으로 감싸야한다.
function* fn() {
console.log(1);
yield 1;
console.log(2);
yield 2;
console.log(3);
yield 3;
return "finish";
}
const a = fn();
console.log(a);
console.log(a.next());
console.log(a.next());
console.log(a.next());
console.log(a.next());
외부로 부터 값을 입력 받음
// 제네레이터 (Generator) 는 외부로 부터 값을 입력 받을 수 있다.
function* fn() {
const num1 = yield "첫번째 숫자를 입력해주세요";
console.log(num1);
const num2 = yield "두번째 숫자를 입력해주세요";
console.log(num2);
return num1 + num2;
}
const a = fn();
console.log(a.next()); // 결과, {"value": "첫번째 숫자를 입력해주세요","done": false}
console.log(a.next(3)); // 결과, {"value": "두번째 숫자를 입력해주세요","done": false}
console.log(a.next(7)); // 결과, {"value": 10,"done": true}
무한 반복문
// 제네레이터 (Generator) 는 값을 미리 만들어 두지 않아서 메모리를 잡아먹지 않는다.
// 무한 반복을 돌려도 필요한 만큼만 생성을 하기 때문에 브라우저가 다운되지 않는다.
function* fn() {
let index = 0;
while (true) {
yield index++;
}
}
const a = fn();
console.log(a.next()); // 결과, {"value": 0,"done": false}
console.log(a.next()); // 결과, {"value": 1,"done": false}
console.log(a.next()); // 결과, {"value": 2,"done": false}
console.log(a.next()); // 결과, {"value": 3,"done": false}
console.log(a.next()); // 결과, {"value": 4,"done": false}
console.log(a.next()); // 결과, {"value": 5,"done": false}
'Dev > JAVASCRIPT' 카테고리의 다른 글
Javascript JS DOM & EVENT #2 부모, 자식, 형제 노드 (0) | 2024.02.01 |
---|---|
Javascript JS DOM & EVENT #1 노드에 접근하기 (0) | 2024.02.01 |
Javascript JS async / await (0) | 2024.02.01 |
Javascript JS 콜백함수 (callback) (0) | 2024.02.01 |
Javascript JS 클래스(class) (1) | 2024.01.31 |