함수 + 함수를 둘러싼 렉시컬 환경(Lexical environnment)
클로저를 처음 공부할 때는 저 말이 이해가 안되어서(일단 렉시컬 환경이 뭔지도 몰랐다) 다양한 사이트와 동영상을 뒤지며 다른 여러 버전의 정의를 찾아봤다.
외부 함수 호출이 종료된 후에도 함수의 내부변수에 대한 메모리할당을 유지하지만 직접 볼 수 없게
은닉화
하기 때문이다
전역변수를 사용하지 않으려는 목적
인듯하다.며칠전에 전임자가 짜놓은 코드중에 resize 이벤트에 달아 놓은 콜백함수가 디바운스를 엉뚱하게 사용하고 있는것을 발견했다.
const debounce = (event) => {
let timer;
if (tiemr) clearTimeout(timer);
timer = setTimeout(callback, delay, event);
};
};
useEffect(() => {
window.addEventListener('resize', debounce)
return () => {
window.removeEventListener('resize', debounce)
}
},[])
-> 이렇게 쓰면 resize 될 때마다 timer 변수롤 계속 새로 만들어버린다
const debounce = () => {
let timer;
return event => {
if (tiemr) clearTimeout(timer);
timer = setTimeout(callback, delay, event);
}
};
useEffect(() => {
window.addEventListener('resize', debounce())
return () => {
window.removeEventListener('resize', debounce())
}
},[])
-> 이렇게 쓰면 timer는 한번만 생성되고 debounce() 가 리턴하는 콜백함수는 은닉화된 timer를 참조할 수 있게 된다!
감사합니다