JS / 클로저(closure) 호출방법
클로저 관련 문제를 풀 때, 나는 제대로 코드를 작성했다고 생각했다.
그런데 테스트통과가 안되는 것이다.
- outer()();
- const fn = outer();
console.log(fn()) ;
1번과 2번이 같은 것이라고 생각하고 있었다 !! (충격)
실제로 테스트가 호출하는 방식은 2번인데,
1번 호출값을 염두해두고 코드를 짰었다. 안되는게 당연하다 ^^
처음 클로저를 배울 때, 개념이 어렵게 다가왔다.
외부함수의 변수에 접근할 수 있는 내부함수인 클로저.
예시를 보면서 공부를해도 항상 헷갈렸는데,
내가 직접 문제를 풀다가 클로저를 마주하니까
여태 이해하지 못했던 예시들을 이해할 수 있게 되었다.
클로저에 대한 미숙함을 인정하고 다시 처음부터 복습했다.
아래에 내가 헷갈렸던 부분에 대한 코드도 정리해봤다.
function outer(){
let count = 0;
return function inner() {
count ++;
return count;
}
}
// outer , inner 함수 모두를 호출해서, count 값이 초기화 됨
console.log(outer()()) // 1
console.log(outer()()) // 1
console.log(outer()()) // 1
// inner 함수만 호출하는 거라서, count 가 초기화 되지않고 더해짐
const fn = outer() // outer의 리턴값을 할당함
console.log(fn()) // 1
console.log(fn()) // 2
console.log(fn()) // 3
나는 클로저를 지배하는 자가 되었다!
다시는 헷갈리지 않을 것이다!
Author And Source
이 문제에 관하여(JS / 클로저(closure) 호출방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@flobeeee/클로저closure-호출방법저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)