JS Closure

김민석·2021년 4월 10일
0

JS

목록 보기
1/5

클로저란?

클로저란 어떤 함수 A에서 선언한 변수 a를 참조하는 내부함수 B를 외부로 전달할 경우 A의 실행 컨텍스트가 종료된 이후에도 변수 a가 사라지지 않는 현상을 말한다.
(외부 함수의 LexicalEnvironment가 가비지 컬렉팅 되지 않는 현상으로 볼 수 있음)

LexicalEnvironment는

  • environmentRecord : (현재 컨텍스트를 구성하는 함수에 지정된 변수 식별자, 선언된 함수 등의 정보 (호이스팅 참조))
  • outerEnvironmentReference : (특정 함수가 선언될 당시의 외부 함수의 LexicalEnvironment)
    로 이루어진다.

코어자바스크립트 : 정재남 참조

function outer(){
    let val = 1

    function inner1(){
        val ++
        console.log(val)
    }
    let message = `this is result of inner2: ${val}`
    function inner2(){
        console.log(message)
    }
    
    return [inner1,inner2]
}

const [inner1, inner2] = outer()

inner1() // 2
inner1() // 3
inner1() // 4
inner2() // 'this is result of inner2: 1 😰🤬

function outer(){
    let val = 1

    function inner1(){
        val ++
        console.log(val)
    }
  
    function inner2(){
        console.log(val)
    }
    
    return [inner1,inner2]
}
const [inner1, inner2] = outer()

inner1() // 2
inner1() // 3
inner1() // 4
inner2() // 4 😰🤬

0개의 댓글