function funcName() {...}
✅ 함수 선언식은 호이스팅 가능 (로직을 어느 위치에서 짜든 상관없이 해당 함수를 불러올 수 있음)
const funcName = function() {...}
✅ 함수 표현식은 함수를 변수에 담은 것.
✅ 호이스팅이 불가능(로직을 상단에서부터 읽기 때문에 위치가 중요)
그리고 너무나도 헷갈렸던 부분은 함수 표현식에서 쓰이는 인자 또는 매개변수이다.
function funcName() {
const args = arguments;
return function(num) {
for(let i = 0; i < args.length; i++) {
...
}
return ...;
}
}
let output = funcName(func1, func2);
console.log(output(4)); // 여기서 4라는 인자는 funcName 안 내부 익명함수의 매개변수
output은 함수 표현식.
✅ output에 인자를 넘겨서 funcName의 리턴되는 익명함수에 매개변수로 받아왔다.
✅ 함수 인자의 개수를 알 수 없을 때 spread syntax 또는 arguments를 사용하게 되는데, arguments를 사용할 때는 리턴되는 함수를 선언하기 전에 꼭 변수에 담아주어야 리턴되는 익명함수에서 쓰일 수 있다.