[DeepDive] 12장 함수

FE 개발자 신상오·2022년 8월 6일
0

JS

목록 보기
15/15
post-thumbnail

12장 함수

1. 함수란?

일련의 과정을 문(statement)으로 구현하고 코드 블록으로 감싸 하나의 실행 단위로 정의한 것

2. 함수를 사용하는 이유

  1. 코드의 재사용
  2. 유지보수의 편의성
  3. 코드의 신뢰성 (실수를 줄일 수 있음)
  4. 코드의 가독성

3. 함수 리터럴

4. 함수 정의


4-1. 함수 선언문

함수는 함수 이름으로 호출하는 것이 아니라 함수 객체를 가리키는 식별자로 호출 한다 즉, 함수 객체의 메모리 주소값을 가지고 있는 식별자로 함수를 호출한다

let 식별자 = fuction 함수이름(x, y) {
  retrun x + y;
}

console.log(식별자(2, 5));

// 예시
let add = fuction add(x, y) {
  retrun x + y;
}

console.log(add(2, 5));

이해하기 모호할 수 있는 내용인데 호출을 할 때 함수 add를 불러오는 것 이아니라
함수 add의 메모리 주소값을 가지고있는 식별자 add를 호출해 함수를 호출하는 것임


4-2. 함수 표현식

일급 객체인 함수를 변수에 할당하는 것을 함수 표현식이라 함

값은 변수에 할당 할 수 있고, 프로퍼티 값이 되며, 배열의 요소도 된다.
값의 성징를 갖는 객체를 일급 객체라 하는데 객체인 함수도 값의 특성을 가지고 있으므로 일급 객체이다.


4-3. 함수 생성 시점과 함수 호이스팅

함수 호이스팅은 함수 선언문에서 발생
함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 JS 고유의 특징을 함수 호이스팅이라 한다.

함수 표현식은 변수에 할당하는 구조이므로 var 키워드를 써서 함수를 할당하면
함수 선언문과는 다르게 변수 호이스팅이 발생함


4-4. Function 생성자 함수

일반적이지 않으며 바람직하지 않은 함수 생성 방법
클로저를 생성하지않고, 일반적인 함수 선언문이나 표현식으로 생성한 함수와 다르게 동작한다.


4-5. 화살표 함수

=> 를 사용해 좀 더 간략한 방법으로 함수 선언, 내부 동작 또한 간략화 되어있다.

선언문과 표현식 함수를 대체하지 못하는 이유

  • 생성자 함수로 사용할수 없음
  • 기존함수와 this 바인딩 방식이 다르다
  • prototpye 프로퍼리 없음
  • arguments 객체 생성하지 않음

📗 5. 함수 호출

5-1. 매개변수와 인수

함수 선언할 때 정의하는 것 - 매개변수
함수 호출할 때 전달하는 값 - 인수


5-2. 인수 확인

JS 함수는 매개변수와 인수의 개수가 일치하는지 확인하지 않고
매개변수의 타입을 사전에 지정할 수 없으므로
필요에 따라 조건문으로 적절한 인수가 전달되었는지 확인할 필요가 있다


5-3. 매개변수의 최대 개수

ECMAScript 사양에서는 매개변수의 최대 개수에 대한 제한은 없음
함수에서 많은 매개변수는 유지보수성을 나쁘게 만드므로
이상적은 매개변수는 0개 그리고 최대 3개를 넘지 않도록 작성하는 것이 좋음


5-4. 반환문

함수의 실행결과를 반환문으로 함수 외부로 반환할 수 있음
명시적으로 반환값을 지정해주지 않으면 함수는 undefined를 반환함


📗 6. 참조에 의한 전달과 외부 상태의 변경

인수로 원시 값이 아니라 참조 값을 전달 받을 경우
함수가 참조 값을 영향을 끼치는 경우 객체의 원본을 훼손할 수 있다.

📗 7. 다양한 함수의 형태

7-1. 즉시 실행 함수

단 한번만 호출되며 다시 호출 할 수 없음
반드시 (...) 그룹 연산자로 감싸야한다.

(fuction () {
 	let a = 3;
 	let b = 5;
 	return a * b;
 }());

7-2. 재귀 함수

자기 자신을 호출하는 형태의 함수
반복문 없이 반복처리할 수 있다는 장점이 있지만
스택 오버플로 에러를 발생할 수 있기 때문에 주의해서 사용해야함


7-3. 중첩 함수

함수 내부에 정의된 함수
함수가 정의된 스코프에서만 호출할 수 있다
스코프 밖에서 중첩 함수를 호출하는 것은 불가능함


7-4. 콜백 함수

함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수
고차함수에 함수의 리턴값을 전달하는 것이 아니라 함수 자체가 전달 됨

매개변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수는 고차함수라고 한다.
즉, 함수를 인수로 전달받는 함수를 고차함수라고 한다.


7-5. 순수 함수와 비순수 함수

순수함수 - 외부 상태에 의존하지 않고 외부 상태를 변경하지 않는, 부수 효과 없는 함수
비순수 함수 - 외부 상태에 의존하거나, 외부 상태를 변경하는 부수 효과가 있는 함수


profile
주간 회고용 블로그입니다 (개발일지와 정보글은 티스토리에 작성합니다.)

0개의 댓글