1.2.1 함수란 무엇인가?
하나의 블록으로 감싸서 실행 단위로 만들어 놓은 것
1.2.2 함수를 정의하는 4가지 방법
1. 함수 선언문
- 일반적인 함수 선언과 비슷
- 함수 이름을 명시하여 정의하는 방식
- function myFunction()
2. 함수 표현식
- 함수를 변수에 할당하는 방식
- var myFunc = myFunction()
함수 선언문 vs 함수 표현식
- 호이스팅(Hoisting)
- 함수 선언문 : 호이스팅의 영향을 받아 함수 전체가 끌어올려짐. 선언 전에도 함수 호출 가능
- 함수 표현식 : 변수 선언만 호이스팅되어 선언 전에 호출하면 undefined
- 함수 이름 사용 여부
- 함수 선언문 : 함수 이름을 사용
- 함수 표현식 : 함수 이름 생략 가능 (오히려 함수에 이름을 주는 것은 방해 요소가 된다.)
3. Function 생성자
const add = new Function('a', 'b', 'return a+b')
add(10, 24)
- Function 생성자를 활용하는 방식
- 매개변수, 함수의 몸통을 모두 문자열로 작성해야하기 떄문에 권장하지 않는다.
- 거의 사용되지 않는 방식
4. 화살표 함수
- 화살표를 사용하여 만드는 함수. 간결하고, 가독성 좋음
- 생성자 함수로 사용 불가능 (constructor 사용 불가능)
const Car = (name) => {
this.name = name
}
const myCar = new Car('안녕') // TypeError
- new 연산자로 호출 불가
- 자신만의 this 값을 가지지 않기 때문
- 화살표 함수의 this는 상위 스코프의 this를 가리키게 된다.
- arguments 객체 사용 불가능 (arguments 객체 : 함수에 전달된 인수들을 배열과 유사한 형태로 저장하고 있는 객체)
const hi = () => {
console.log(arguments)
}
hi(1,2,3) // ReferenceError : arguments is not defined
- arguments 객체가 자동으로 생성되지 않기 때문에 인자를 정확하게 넘겨주지 않으면 Error
const hi = (...rest) => {
console.log(rest) // [1,2,3]
}
hi(1,2,3)
- arguments 대신에 Rest 매개변수를 사용할 수 있음. (전달된 모든 인수를 배열로 받음)
1.2.3 다양한 함수 살펴보기
1. 즉시 실행 함수
- 말 그대로 함수를 정의하고 그 순간 즉시 실행되는 함수
- 단 한 번만 호출되면 다시금 호출할 수 없다. (재사용 X)
- 선언만으로 실행이 그 자리에서 끝난다는 것을 알 수 있기 때문에 리팩터링에도 도움.
(function (a,b) {
return a + b
})(10, 24) // 34
((a, b) => {
return a + b
})(10, 24) // 34
2. 고차 함수
- 함수를 변수에 할당하거나, 함수의 인자로 전달하거나, 함수의 반환값으로 사용 가능
1.2.4 함수를 만들 때 주의해야 할 사항
1. 함수의 부수 효과를 최대한 억제하라
- 부수 효과(side-effect) : 함수 외부에 영향을 끼치는 것
- 순수 함수 : 부수 효과가 없는 함수
- 순수 함수는 언제 실행되든 항상 결과가 동일하기 때문에 예측 가능하며 안정적임.
- 예측 가능한 단위의 부수 효과가 작은 함수를 설계하면, 유지보수가 쉬워진다.
2. 가능한 한 함수를 작게 만들어라
- 함수는 하나의 일을, 그 하나만 잘하면 된다.(Do One Thing and Do It Well)
- 하나의 함수에서 너무 많은 일을 하게 하지 말 것
- 코드의 길이가 길어질수록
- 코드 냄새(문제를 일으킬 여지가 있는 코드)가 날 확률이 커지며,
- 무슨 일이 일어나는지 예측할 수 없다.
3. 누구나 이해할 수 있는 이름을 붙여라
- 가능한 한 함수 이름은 간결하고 이해하기 쉽게.
1.2.5 정리
함수 : 하나의 블록으로 감싸서 실행 단위로 만들어 놓은 것
함수를 정의하는 4가지 방법
- 함수 선언문
- 함수 표현식
- Function 생성자
- 화살표 함수
다양한 함수
- 즉시 실행 함수
- 고차 함수
함수를 만들 때 주의사항
- 함수의 부수 효과를 최대한 억제하라
- 가능한 한 함수를 작게 만들어라
- 누구나 이해할 수 있는 이름을 붙여라
'Web > 모던 리액트 Deep Dive' 카테고리의 다른 글
[모던 리액트 Deep Dive] 리액트에서 자주 사용하는 자바스크립트 문법 (0) | 2024.04.29 |
---|---|
[모던 리액트 Deep Dive] 이벤트 루프와 비동기 통신의 이해 (0) | 2024.04.28 |
[모던 리액트 Deep Dive] 클로저 (0) | 2024.04.28 |
[모던 리액트 Deep Dive] 클래스 (1) | 2024.04.28 |
[모던 리액트 Deep Dive] 자바스크립트의 동등비교 (0) | 2024.04.27 |