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