1 var outer = function() {
2 var a = 1;
3 var inner = function() {
4 return ++a;
5 };
6 return inner;
7 };
8
9 var outer2 = outer();
10 console.log(outer2()); //2
11 console.log(outer2()); //3
outer2
변수가 outer
함수의 실행을 통해 반환된 inner
함수를 참조합니다.inner
함수의 실행컨텍스트는 아래와 같습니다.→ enrivonmentRecord : { }outer
함수의 Lexical Environment
}outer
함수의 Lexical Environment
의 a
변수에 접근합니다.outer
함수가 종료되었음에도 Lexical Environment
에 접근할 수 있는 이유는 변수 a
를 inner
함수가 참조하고 있고 이 inner
함수를 outer2
변수가 참조하고 있기 때문입니다. GC는 참조되고 있는 대상을 수집대상에서 제외합니다.Reference Count
를 0으로 만들어 GC의 대상이 되도록 만들어주어야 한다.null
이나 undefined
를 할당 해준다.public
, private
, protected
3종류가 있다.public
과 private
의 권한을 구분할 수 있다.1 var curry5 = function(func){
2 return function(a) {
3 return function(b) {
4 return function(c) {
5 return function(d) {
6 return function(e) {
7 return func(a,b,c,d,e);
8 };
9 };
10 };
11 };
12 };
13
14 var getMax = curry(Math.max);
15 console.log(getMAx(1)(2)(3)(4)(5));
화살표 함수로 간결하게 표현
var curry5 = func => a => b => c => d => e =>func(a, b, c, d, e);