본문 바로가기
IT/Programming Language

[Javascript] closure

by FreeYourMind 2022. 2. 20.

Lexical Environment

1. Environment Record : 모든 지역 변수를 저장하고 있는 객체 (일반적인 변수)

2. Outer Lexical Environment : 자신의 Scope을 제외한 외부의 변수를 저장하는 객체

 

Closure

- 변수에 함수를 담아두어 Garbage Collection에 의해 함수의 지역 변수값이 사라지지 않도록 함

- 외부함수의 실행 종료로 외부함수의 지역 변수가 소멸했음에도 내부함수가 외부함수의 지역 변수에 접근이 가능

- JS의 함수는 [[Environment]]를 이용해 자신이 어디서 만들어졌는지를 기억함

function addUsingClosure() { 
	var sum = 0; 
    return function (number) { 
    	sum += number; 
        return sum; 
    }; 
} 

var add = addUsingClosure(); 
console.log(add(1)); //1 
console.log(add(1)); //2 
add = null; // 메모리에서 삭제
add = addUsingClosure(); 
console.log(add(2)); //2 add = null; 이 없다면 4
console.log(add(2)); //4 add = null; 이 없다면 6
var add = (() => { 
	var sum = 0; 
    return (number) => { 
    	sum += number; 
        return sum; 
    }; 
})(); 

console.log(add(1)); 
console.log(add(1)); 
console.log(add(2)); 
console.log(add(2));
function sum(a) {

  return function(b) {
    return a + b; // 'a'는 외부에서 가져옴
  };

}

alert( sum(1)(2) ); // 3
alert( sum(5)(-1) ); // 4

 

이렇게 쓴다고 외우면 외운대로 쓸 수는 있지만, 이것이 필요한 이유를 잘 모르겠다.

closure가 꼭 필요한 이유가 있을까? 좀 더 쉽게 코드를 작성할 수 있으면 그것을 사용하는게 가독성, 생산성 측면에서 더 적절한 듯 하다.

 

 

출처

https://devbro.tistory.com/6

https://godtaehee.tistory.com/4

https://ko.javascript.info/closure

'IT > Programming Language' 카테고리의 다른 글

Generic이란  (0) 2022.03.06
[Javascript] 비동기 처리 방식  (0) 2022.02.20
[Javascript] var -> let, const  (0) 2022.02.19
[Javascript] ... 활용  (0) 2022.02.19
[Javascript] Arrow Function vs Function  (0) 2021.10.31

댓글