본문으로 바로가기

[JS] 클로저(Closure)

category WEB/JS 2019. 1. 10. 14:29

클로저?


외부함수가 내부함수를 반환하는 경우,

외부함수를 호출하면 외부함수는 내부함수를 반환하고 실행 컨텍스트 스택에서 제거된다.

하지만 반환된 내부함수는 외부함수에 있는 변수에 접근할 수 있다.


즉,


내부함수가 외부함수보다 더 오래 유지되는 경우,

외부함수 밖에서 내부함수가 호출되더라도 외부함수의 지역 변수에 접근할 수 있는 현상.

이를 클로저라 한다.


1
2
3
4
5
6
7
8
9
10
function A(){
    let hello = "hello";
    return funtcion(){
        alert(hello);
    }
}
 
let func = A();
func();
// hello 변수에 접근할 수 있다.
cs


클로저는 반환된 내부함수가 자신이 선언됐을 때 환경인 스코프를 기억하여,

자신이 선언됐을 때의 환경 밖에서 호출되어도 그 환경(스코프)에 접근할 수 있는 함수를 말한다.


외부함수가 이미 반환되어도 그 안에 있는 변수는 이를 필요로 하는 내부함수가 하나라도 존재하는 경우 계속 유지된다.

이때 내부함수는 외부함수에 있는 변수의 복사본이 아닌 실제 변수에 접근한다.


이러한 특성을 이용해 Private나 Currying을 구현할 수 있다.


1
2
3
4
5
6
7
8
9
10
function hello(name){
    let _name = name
    return function{
        console.log("hello" + _name);
    }
}
 
hello1 = hello("철수");
hello1();
// hello1은 외부 함수의 변수에 접근할 수 없다.
cs


'WEB > JS' 카테고리의 다른 글

[JS] 제너레이터  (0) 2019.01.13
[JS] 이터러블과 이터레이터  (0) 2019.01.13
[JS] 실행 컨텍스트  (0) 2019.01.09
[JS] this 바인딩  (0) 2019.01.09
[JS] 스코프, 렉시컬 스코프  (0) 2019.01.09