JS / 클로저(closure) 호출방법

4120 단어 2021.012021.01

클로저 관련 문제를 풀 때, 나는 제대로 코드를 작성했다고 생각했다.
그런데 테스트통과가 안되는 것이다.

  1. outer()();
  2. 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

나는 클로저를 지배하는 자가 되었다!
다시는 헷갈리지 않을 것이다!

좋은 웹페이지 즐겨찾기