✏️ 접근과정
- 처음엔
add(1)(2)(3)
이 도대체 뭔지 전혀 파악을 못함. 매개변수를 한번에 넘기는 거였다면 add(1, 2, 3)
이렇게 써있어야 했을테고 함수도 매개변수를 세개 받을 수 있게 function add (num, num2, num3)
이렇게 되어있어야 했을텐데 아니니까 어떤 방식으로 받으면 될까 생각함
- 어쨌든
()
꼴은 함수명 뒤에 붙어서 함수를 호출할 때 썼으므로 add(1)
의 결과가 함수로 나오면 그대로 뒤에있는 (2)
에 붙어서 또 함수가 실행 될거같다고 느낌
- 그래서
add
의 리턴값에 add
를 줬더니 그냥 add
함수를 보여주는 결과가 나옴


- 뒤의
(2)
를 받으려면 또 다른 매개변수를 받는 새로운 함수가 필요하다 생각했고, 제시된 경우에서 결과가 매개변수를 모두 합한 값과 같았으므로 함수내부에 각 매개변수를 더하는 변수가 필요하다 생각했음
📝 풀이
function add (num) {
let sum = 0;
sum += num;
return function add2 (num2) {
sum += num2;
return function add3 (num3) {
sum += num3;
return sum;
}
}
}
const six = add(1)(2)(3);
const ten = add(2)(3)(5);
console.log(six);
console.log(ten);
- 처음에
add(1)
실행된후 sum
이 선언되고 매개변수의 값이 더해져 sum = 1
이 add1 LexicalEnvironment
에 저장되고, 리턴값으로 인해 add2(num2)
를 실행함
num2
의 매개변수로 2
를 받아오며 add2 LexicalEnvironment
에 num2 : 2
가 기록되고, sum
에대한 정보는 add2 LexicalEnvironment
에 없기에 add1 LexicalEnvironment
를 참조하여 sum = 1
을 읽어와 계산 후 sum = 3
을 저장함. 그리고 리턴값으로인해 add3(num3)
실행
num3
의 매개변수로 3
을 받아오며 add3 LexicalEnvironment
에 num3 : 3
가 기록되고, sum
에대한 정보는 add3 LexicalEnvironment
에 없기에 add2 LexicalEnvironment
를 참조하여 sum = 3
을 읽어와 계산 후 sum = 6
을 저장함. 그후 리턴값으로 sum
의 현재 값인 6
이 출력되고 six
변수에 할당됨