클로저란?
함수에서 함수로 외부변수를 전달한뒤에도
실행컨텍스트가 종료된이후에도 참조한 외부변수가 사라지지않는 현상
보통 종료된이후에는 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)
반응형
'Frontend > 모던자바스크립트' 카테고리의 다른 글
자바스크립트 스프레드 연산자 (0) | 2023.07.25 |
---|---|
[리팩토링] if문 대신 매핑하기 (0) | 2023.07.07 |
Javascript BigNumber 에러 1e+22 해결 (0) | 2023.04.19 |
구조분해할당과 Null 처리 (0) | 2023.01.31 |
While문 api 호출 리펙토링(setTimeout, setInterval) (0) | 2023.01.05 |