[JavaScript] 자바스크립트 클로저란?
글 작성자: 망고좋아
반응형
🎯 클로저
- 자바스크립트 클로저는, 함수의 일급 객체 성질을 이용한다.
- 함수가 생성될 때, 함수 내부에서 사용되는 변수들이 외부에 존재하는 경우 그 변수들은 함수의 스코프에 저장된다.
- 함수와 함수가 사용하는 변수들을 저장하는 공간을 클로저(closure)라고 한다.
// 팩토리 함수
function createCard() {
let title = "";
let content = "";
function changeTitle(text) {
return { title = text }
}
function changeContent(text) {
return { content = text }
}
function print() {
console.log("TITLE - ", title);
console.log("CONTENT - ", content);
}
return { changeTitle, changeContent , print };
}
// 클로저 생성
const card1 = createCard();
card1.changeTitle("생일카드");
card1.changeContent("생일 축하해");
card1.print();
// 클로저 생성, card1와 다른 별도의 메모리 공간에 title, content 생성
const card2 = createCard();
card2.changeTitle("감사카드");
card2.changeContent("고마워");
card2.print();
- 함수를 생성해서 리턴하는 함수를 팩토리 함수라고 부른다.
- 팩토리 함수 내부에서 생성한 변수들은 팩토리 함수가 끝나도 메모리에 살아있다.
let rate = 1.05;
function app() {
let base = 10;
return function(price) {
return price * rate + base;
};
}
const getPrice = app();
console.log(getPrice); // function (price) { return price * rate + base; }
console.log(getPrice(120)); // 136
- base는 app 함수 내부, rate는 app 함수 내부의 스코프에 존재한다.
- 함수가 참조하는 변수는 실행 시점에 실행 컨텍스트에 의해 스코프가 결정된다.
📝 주의사항
let rate = 1.05;
function app() {
let base = 10;
return function(price) {
return price * rate + base;
};
}
console.log(app()(1)); // 11.05;
rate = 1.1;
console.log(app()(1)); // 11.1
- 스코프에 따라서 변수에 영향을 받는다.
- rate의 변경은 두 클로저 함수 호출에 반영되지만, base는 증가해도 영향을 미치지 않는다.
- base 변수는 app 호출될 때마다 별도의 메모리 공간에 할당되는 변수이므로 간섭이 없다.
- 그러나 rate경우 app함수 밖에서 선언되었기 때문에 rate 값이 바뀌면 모든 클로저에 영향을 끼친다.
- 즉, base는 app 호출 시 매번 생성되는 반면, rate는 매번 생성되지 않는다.
반응형
'프로그래밍 > JavaScript' 카테고리의 다른 글
[JavaScript] 자바스크립트 전개 연산자란? (0) | 2021.11.13 |
---|---|
[JavaScript] 자바스크립트 나머지 매개변수란? (0) | 2021.11.13 |
[JavaScript] 자바스크립트에서 함수는 일급 객체(first-class-object)이다. (0) | 2021.11.13 |
[JavaScript] 자바스크립트 화살표 함수와 일반 함수의 this (0) | 2021.11.13 |
[JavaScript] 자바스크립트 실행 컨텍스트 (0) | 2021.11.13 |
댓글
이 글 공유하기
다른 글
-
[JavaScript] 자바스크립트 전개 연산자란?
[JavaScript] 자바스크립트 전개 연산자란?
2021.11.13 -
[JavaScript] 자바스크립트 나머지 매개변수란?
[JavaScript] 자바스크립트 나머지 매개변수란?
2021.11.13 -
[JavaScript] 자바스크립트에서 함수는 일급 객체(first-class-object)이다.
[JavaScript] 자바스크립트에서 함수는 일급 객체(first-class-object)이다.
2021.11.13 -
[JavaScript] 자바스크립트 화살표 함수와 일반 함수의 this
[JavaScript] 자바스크립트 화살표 함수와 일반 함수의 this
2021.11.13