✏️ 접근과정
- 처음엔
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 변수에 할당됨