Frontend/모던자바스크립트
자바스크립트 클로져 예시
두바이유
2023. 5. 3. 17:48
클로저란?
함수에서 함수로 외부변수를 전달한뒤에도
실행컨텍스트가 종료된이후에도 참조한 외부변수가 사라지지않는 현상
보통 종료된이후에는 GB에 할당되야하는데 계속 남기때문에 메모리 누수의 원인이됨.
콜백함수 내부에서 외부변수를 참조하기 위한 방법이다.
let fruits = ['a','b','p']
let $ul = document.createElement('ul')
const alertFruit = (fruit) => {
alert(fruit)
}
fruits.forEach(fruit => {
let $li = document.createElement('li')
$li.innerText = fruit
// 클로저발생(메모리낭비): 콜백함수를 내부함수로선언해서 외부변수를 직접참조
// $li.addEventListener('click',()=>{
// alert(fruit)
// })
// 클로저를 발생하지 않게하는법
// 1. 바인드 메서드로 값을 강제로 직접넘겨줌 => 위험부담
// $li.addEventListener('click', alertFruit.bind(null, fruit))
// 2. 고차함수
$li.addEventListener('click', ()=>alertFruit(fruit))
$ul.appendChild($li)
})
document.body.appendChild($ul)
반응형