const Iterator = (arr)=>{
let i = 0
return{
next:()=>{
return i<arr.length?{value:arr[i++],done:false}:{done:true}
}
}
}
const iterableObj = {
[Symbol.iterator](){
return Iterator([1,2,3])
}
}
for (const elem of iterableObj){
console.log(elem)
}
for of에서 이터레이터의 next()를 호출해서 done===true이면 반복을 중단하고 done===false면 계속 반복하면서 elem에 value를 할당 후 함수 본문을 실행한다.
for of 대신 전개 연산자도 쓸 수 있다. 순회 가능한 객체의 이터레이터가 반환한 value가 출력된다.
console.log(...iterableObj);
array, map, set 등의 객체는 이터러블 프로토콜을 구현한다. 다른 형태의 객체들을 일관된 문법을 써서 순회할 수 있다.
https://es6console.com/jqamj5ll/
'JS > ECMAscript' 카테고리의 다른 글
ECMAScript6 온라인 실행 환경 (0) | 2018.12.31 |
---|---|
프로미스 promise (0) | 2018.12.31 |
이터레이터 프로토콜 iterator protocol (0) | 2018.12.30 |
for of (0) | 2018.12.30 |
forEach (0) | 2018.12.29 |