iterator/iterable 및generator

14515 단어

iterator/iterable 및generator


iterator
넥스트 방법을 포함하는 대상,value와done를 포함하는 대상을 되돌려줍니다.
function makeIterator(array) {
  var nextIndex = 0;
  return {
    next: function () {
      return nextIndex < array.length ? {
        value: array[nextIndex++],
        done: false
      } : {
        done: true
      };
    }
  };
}

var it = makeIterator(['yo', 'ya']);
console.log(it.next().value); // 'yo'
console.log(it.next().value); // 'ya'
console.log(it.next().done);  // true

iterable
하나는 Symbol을 실현시켰다.iterator 속성의 대상입니다. 교체 가능한 대상이라고 합니다.
var myIterable = {};
myIterable[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};

for (let value of myIterable) {
  console.log(value);
}
// 1
// 2
// 3

//or

console.log([...myIterable]); // [1, 2, 3]

generator
자신의 상태를 유지할 수 있는 교체기 공장 함수
function* idMaker() {
  var index = 0;
  while(true)
    yield index++;
}

var gen = idMaker();

console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2

다음 예를 참조하십시오.
let arr = [1, 2, 3];

/*
  generator next 
   
*/
function* gen(arr) {
  for (let x of arr) {
    yield x;
  }
}

function makeIterator(arr) {
  let nextIndex = 0;
  return {
    [Symbol.iterator]: function() {
      return this;
    },
    next: function() {
      return nextIndex < array.length ?
        {value: array[nextIndex++], done: false} :
        {value: undefined, done: true};
    }
  }
}

/*
   Symbol.iterator, iterable
  iterable ymbol.iterator 
*/
let iterable = gen(arr);
console.log(iterable[Symbol.iterator]);
/*
   
*/
let iterator = iterable[Symbol.iterator]();
console.log(iterator === iterable);

let iterable2 = makeIterator(arr);
console.log(iterable2[Symbol.iterator]);
let iterator2 = iterable2[Symbol.iterator]();
console.log(iterator2 === iterable2);

/*
[Function: [Symbol.iterator]]
true
[Function: [Symbol.iterator]]
true
*/

즉,
gen이 생성한generator 대상은 iterable의 대상이자 iterator입니다.

좋은 웹페이지 즐겨찾기