인프런 유인동님의 '함수형 프로그래밍과 JavaScript ES6+' 강의를 들으며 정리 및 공부한 내용입니다.
symbol을 알고 있었지만 다시한번 공부하자
https://ko.javascript.info/symbol
https://www.youtube.com/watch?v=E9uCNn6BaGQ&t=249s
2. computed property key
key로 변수를 넣는 방법
const iterable = {
[Symbol.iterator]() {
let i = 3;
return {
next() {
return i == 0 ? { done: true } : { value: i--, done: false };
}
}
}
}
let iterator = iterable[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
iterator.next();
for (const a of iterator) console.log(a);
=> 구현한대로 next 함수는 잘 실행된다.
=> 하지만 우리가 원하는 iterator를 구현하지는 못했다.
=> of 및 앞에 next가 실행된 다음 이어서 2번째 부터 실행되는 등 우리가 iterator에 기대하는 것들을 충족하지 못한다.
const iterable = {
[Symbol.iterator]() {
let i = 3;
return {
next() {
return i == 0 ? { done: true } : { value: i--, done: false };
},
[Symbol.iterator]() { return this; }
}
}
}
=> 위의 코드와 같이 자기 자신이 여전히 iterator라는 것을 그리고 이어진 상태를 계속해서 이어주어야함.
그렇게 이러한 iterator의 기능을 모두 충족하는 것을 우리는
well-formed-iterator라고 한다.
암기
well-formed-iterator: iterator method가 iteraotr protocol이 구현된 object를 리턴하는 것