ES6에서 yieId 및 Generator 확인

1772 단어
yieId:yield는 생성기 함수를 일시 정지시키는 ES6의 새 키워드입니다.
Generator: (생성기) ES6 표준에 도입된 새로운 데이터 형식입니다.generator는 함수처럼 보이지만 여러 번 되돌아갈 수 있습니다.정의는 function과 유사합니다. 이름 앞에 *를 추가합니다. 다음은 생성기의 정의입니다.
function* fibs() {
  
}

코드 확인:
function* fibs() {
    let a = 0;
    let b = 1;
    while (true) {
        yield a;
        [a, b] = [b, a + b];
    }
}

let [first, second, third, fourth, fifth, sixth] = fibs();

first에 값을 부여할 때fibs를 호출하고yieId를 만났을 때 멈추기 때문에 이때 a=0, b=1,first=0;second에 값을 부여할 때fibs를 계속 호출합니다. 지난번에 멈춘 곳부터 a=b=1, b=a+b=0+1=1, second=a=1;third에 값을 부여하고fibs를 계속 호출합니다. 지난번 정지 장소부터 a=b=1, b=a+b=1+1=2,third=a=1;fourth에 값을 부여하고fibs를 계속 호출합니다. 지난번 정지 장소부터 a=b=2, b=a+b=1+2=3, fourth=a=2;fifth에 값을 부여하고fibs를 계속 호출합니다. 지난번 정지 장소부터 a=b=3, b=a+b=2+3=5, fifth=a=3;sixth에 값을 부여하고fibs를 계속 호출합니다. 지난번 정지 장소부터 a=b=5, b=a+b=3+5=8,sixth=a=5;
이상, 가장 간단한 코드에 대한 상세한 설명을 통해 yieId와Generator의 용법을 알 수 있다. 그러나 이것은 프로젝트에서의 일반적인 용법이 아니다. 개념을 이해하기 쉽도록 읽을 뿐이다. 다음은 일상적인 용법을 해석한다.
var foo = function *() {
    var x = 1;
    var y =  yield (x + 1);
    var z = yield (x + y);
    return z;
}()
var a = foo.next();
var b = foo.next(3);
var c = foo.next(5);

우리는 항상 생성기를 정의한 후에 넥스트 () 드라이브를 통해 호출합니다. 넥스트의 매개 변수는 지난번에 실행된 yieId의 값을 대표합니다. 따라서 첫 번째 호출할 때 넥스트에 매개 변수를 전송할 필요가 없습니다. 반환 값은 {value,done}를 포함하고,value는 현재 값을 대표합니다. done는 현재 생성기의 실행 여부를 표시합니다.
console.log(a)             //{ value: 2, done: false }
//y = x + 1 = 2,  yieId  ,  done  = false
console.log(b)            //{ value: 4, done: false }
// z = x + y = 1 + 3 = 4,  y   yieId  ,  3,  yieId (x+1) = 3,  yieId  , ,  done = false
console.log(c)            //{ value: 4, done: true }
// z = 5,  5  ,  return  ,  done = true

좋은 웹페이지 즐겨찾기