클로저 함수
클로저 함수는 외부 함수의 실행이 끝나더라도 외부 함수 내 변수를 사용할 수 있습니다. 클로저는 이처럼 특정 데이터를 스코프 안에 가두어 둔 채로 계속 사용할 수 있게 하는 폐쇄성을 갖습니다.
// 클로저를 만드는 형태 1. - 중첩함수
function outerFn() {
let x = 10;
return function innerFn(y) { // innerFn 함수는 클로저다.
return x = x + y;
}
}
let a = outerFn(); // 외부함수 호출은 한번만. 이제 a 변수는 innerFn 함수를 참조한다.
a(5); // 15;
a(5); // 20;
a(5); // 25;
// 클로저를 만드는 형태 2. - 전역에 선언한 변수를 박스 안에서 함수로 정의하고 전역에서 호출
let globalFunc;
{
let x = 10;
globalFunc = function(y) { // globalFunc 함수는 클로저다.
return x = x + y;
}
}
globalFunc(5); // 15;
globalFunc(5); // 20;
globalFunc(5); // 25;
내부 함수가 상위 스코프의 식별자를 참조하고 있고, 그 내부함수를 그 상위 스코프 바깥에서 사용했을 때, 그 상위 스코프의 식별자를 수정할 수 없는 형태이다.
즉 클로저는 함수를 리턴하는 함수일까요? 함수를 리턴하는 함수가 아니라 내부함수가 상위 스코프의 식별자를 참조하고 있고 스 상위 스코프 바깥에서 사용했을 때 그 상위스코프의 식별자를 수정할 수 없는 형태일 뿐입니다.
'Web > Advanced Web Programming' 카테고리의 다른 글
Advanced Web Programming - lexical scope ( 2 ) (0) | 2022.06.13 |
---|---|
Advanced Web Programming - lexical scope (0) | 2022.06.13 |
Java Script - this 바인딩 (0) | 2022.06.04 |
고급 웹 프로그래밍 - 정리 - 2 (0) | 2022.06.04 |
고급 웹 프로그래밍 - 기말 정리 - 1 (0) | 2022.06.04 |