리액트 함수
함순느 작업을 수행하거나 값을 계산하는 과정
블록 단위로 감싸서 실행 단위로 만들어 놓은 것
함수를 정의하는건 4가지가 존재
1. 함수 선언문
중요한 건데 선언문은 그저 함수는 선언하는 것입니다. 값을 표현하지 않는다는 게 중요한데
그저 이런 함수가 있다고 선언한다고 생각하면 편하
function 함수명() {
구현 로직
}
함수 표현식은 일종의 값을 표현하는 것인데 변수를 함수로 정의해서 사용하는 것을 의미한다
이 함수를 쓰면 이런 값이 나온다 라는 의미로 생각하면 편하다
var 함수명 = function () {
구현 로직
};
문제는 함수 선언문과 표현식은 굉장히 경계가 모호해서 어떤건 표현식이 선언문으로 쓰이는 것도 가능함
하지만 차이점은 호이스팅의 여부다
호이스팅은 자바스크립트에서도 다뤘지만 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미하는데
쉽게 말하면 함수를 선언하면 호이스팅은 코드를 실행하기 전 함수를 미리 메모리 공간에 할당해서 함수를 맨 위로 올린다는 것이다
// 실행 전
logMessage();
sumNumbers();
function logMessage() {
return 'worked';
}
var sumNumbers = function () {
return 10 + 20;
};
이 코드를 예로 들면 logMessage는 함수 선언문 아래sumNumbers는 함수 표현식이다
함수 선언문은 호이스팅의 영향을 받아 코드가 실행되면 위치에 상관없이 메모리 공간에 먼저 할당되기에 아래와 깉이 코드가 위로 올라오지만 함수 표현식은 아직 선언되지 않은 sumNumbers를 호출했다 이럼 어떻게 될까?
정답은 var sumNumbers = undefined 가 뜬다는 것이다
왜냐면 메모리 공간은 변수를 할당하고 함수 표현식을 넣지 않았기 때문에 호이스팅의 영향을 받지 않는다
2. Function 생성자
new 함수를 사용하면 생성자를 만들 수 있는데 별로 추천하지 않는다
화살표 함수는