함수 선언 (Function Declaration):
함수 선언은 함수 이름을 가지고 있으며, 이름을 통해 함수를 호출할 수 있습니다. 함수 선언은 코드 블록이 호이스팅되어 함수를 선언하기 이전에도 호출할 수 있습니다.
그냥 함수 이름이 multiply임
function multiply(a, b) {
return a * b;
}
const result = multiply(5, 3); // 함수 이름으로 호출
익명 함수 (Anonymous Function):
익명 함수는 이름이 없는 함수로, 주로 변수에 할당되거나 다른 함수의 인자로 사용됩니다. 익명 함수를 변수에 할당한 후, 해당 변수를 통해 함수를 호출할 수 있습니다.
한 번만 사용하고 쓰지 않을 함수에 대해서는 익명 함수를 사용한다면, 불필요한 메모리를 줄일 수 있다.
익명함수를 만들어서 add라는 변수에 담음
호이스팅 const add로 변수만 호이스팅되고 내용은 안되니까 안됨
const add = function(a, b) {
return a + b;
};
const sum = add(2, 4); // 변수 이름으로 호출
화살표 함수 (Arrow Function):
화살표 함수는 ES6에서 도입된 새로운 함수 정의 문법으로, 익명 함수를 더 간결하게 표현할 수 있습니다.
일반적으로 블록 스코프를 가지지 않습니다.
화살표 함수 내부의 this는 호출되는 시점과는 무관하게 선언되는 시점의 위치 기준으로 결정된다
(전역객체 window가 됨)
그러니까 화살표 함수로 메서드를 정의하는 것은 피해야 한다
익명함수를 화살표함수로 바꿀 수 있다
const subtract = (a, b) => a - b;
const difference = subtract(7, 3);
화살표함수 화살표 2개
let sum = a => async b => { return a + b; };
// 일반 function으로 바꿔보면 좀더 이해가 쉽다
let sum = function(a) {
return async function(b) {
return a + b;
};
};
const calcWith2 = (op) => (num) => op(2, num);
const add = (num1, num2) => num1+num2;
const add2 = calcWith2(add);
add2(3) // 5
// add2를 해서 나온 함수에 3을 넣음
// calcWith2의 op에 add가 담기고 add2 = (num) => add(2, num)로 된거에 num으로 3이 들어간다
const calcWith2 = (op) => ((num) => op(2, num));
// 화살표 여러개면 뒤에서부터 해석해야함. 이렇게 생각해야함