바닐라코딩 Starter Kit - 프렙 코스 신청 전 자가점검

roadzmoon76·2022년 2월 3일
0

✏️ 접근과정

  • 처음엔 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); // 6
console.log(ten); // 10
  1. 처음에 add(1) 실행된후 sum 이 선언되고 매개변수의 값이 더해져 sum = 1add1 LexicalEnvironment 에 저장되고, 리턴값으로 인해 add2(num2) 를 실행함
  2. num2 의 매개변수로 2 를 받아오며 add2 LexicalEnvironmentnum2 : 2 가 기록되고, sum 에대한 정보는 add2 LexicalEnvironment 에 없기에 add1 LexicalEnvironment 를 참조하여 sum = 1 을 읽어와 계산 후 sum = 3 을 저장함. 그리고 리턴값으로인해 add3(num3) 실행
  3. num3 의 매개변수로 3 을 받아오며 add3 LexicalEnvironmentnum3 : 3 가 기록되고, sum 에대한 정보는 add3 LexicalEnvironment 에 없기에 add2 LexicalEnvironment 를 참조하여 sum = 3 을 읽어와 계산 후 sum = 6 을 저장함. 그후 리턴값으로 sum 의 현재 값인 6 이 출력되고 six 변수에 할당됨
profile
크론병걸린 자퇴생, 개발자되기

0개의 댓글