b(a)
// findNodes()가 콜백을 받도록 리팩터링한다.
var findNodes = function (callback) {
var i = 10000,
nodes = [];
// 콜백 함수를 호출할 수 있는지 확인한다.
if (typeof callback !== "function") {
callback = false;
}
while(i) {
i -= 1;
// 이곳에 복잡한 로직을 구현한다.예를들어
nodes[i]=i;
// 여기서 콜백을 실핸한다.
if (callback) {
nodes[i] = callback(nodes[i]);
}
nodes.push(nodes[i]);
}
return nodes;
};
이 구현 방법은 직관적이다.findNodes()에는, 콜백 함수가 추가되었는지 확인하고, 있으면 실행하는 작업 하나만 추가되었다. 콜백은 생략할 수 있기 때문에 리팩터링된 findNodes()는 여전히 이전과 동일하게 사용할 수 있고, 기존 API에 의존하는 코드를 망가뜨리지 않는다.
루프를 돌 필요가 없어진 hide()를 보라.
//콜백 함수
var hide = function (node) {
node = "none";
};
//노드를 찾아서 바로 숨긴다.
findNodes(hide);
//또는 익명 함수를 바로 사용할 수 있다.
findNodes(function (node) {
node = "none";
});
다음 글에는 실제로 콜백을 DOM에 써보자.
댓글 없음:
댓글 쓰기