generator

여기에서는 몇 가지 내용을 같이 참고해야 합니다.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Generator

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/function*

맹대표님 회사 블로그(?)에도 글이 올라와 있습니다. 어렵기는 마찬가지입니다만..

http://www.bsidesoft.com/?p=2053

{
  let iterable = {
    count: 10,
    next() {
      return {
        value: --this.count,
        done: this.count ? false : true
      };
    }
  };
  let iterator = {
    [Symbol.iterator]() {
      return iterable;
    }
  };
  for (let v of iterator) console.log(v);
}

이렇게 복잡한 코드가 이렇게 쉽게 만들어집니다...라는 설명인데 일단 코드는 간략해보이지만 이해하려면 쉽지는 않네요. 그리고 앞의 코드는 동작도 하지 않습니다.

원래 코드는 done: this.count ? true : false인데 done: this.count ? false : true으로 수정했습니다. 오타였다는...

{
  let generator = function*(count) {
    while (count--) yield count;
  };
  for (let v of generator(10)) console.log(v);
}