es6에서 for in과 for of를 통한 반복문이 새로 생겨났다.
이 두 반복문의 차이는 Symbol.iterator이다.
for in은 열거된 객체를 모두 반복할 수 있다.
하지만 for of는 Symbol.iterator 속성을 가지고 있어야만 반복이 가능하다.
const arr = [1,2,3];
const set = new Set([1, 2, 3]);
const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
arr, set, map은 모두 Symbol.iterator속성을 가지고 있다.
그러므로 for of를 통해 순회가 가능하다.
그리고 이렇게 순회가 가능한 것을 이터러블이라고 한다.
이터러블을 이터레이터를 리턴한다.
이터레이터는 next와, 이터레이터를 또 리턴한다.
next는 value, done을 가진 객체로 value에 해당 이터러블의 값과 순회 가능 여부를 출력한다.
위와 같이 순회가 완료되면 done이 true로 변하게 되고 순회가 끝난다.
만약 iter1을 직접next()한후에 for of 반복문을 돌면 어떻게 될까 ?
next()한 이후의 값부터 순회가 된다.
for of를 통해 next()를 하기 때문에 이미 next()를 통해 순회가 된 값에 대해서는 다시 순회하지 않는다.