[Javascript] Deep Dive 12장 함수 - 1

Yuzu·2023년 6월 19일
0

12장 함수

12.1 함수란?

프로그래밍 언어의 함수는 일련의 과정을 문(statement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다.

매개변수(parameter) : 함수 내부로 입력을 전달받는 변수
인수(argument) : 입력
반환값(return value) : 출력

  • 함수는 객체 타입의 값이며, 구분을 위해 식별자인 함수 이름을 사용한다.
  • 함수는 함수 정의(function definition)를 통해 생성한다.
  • 함수 호출(function call/ invoke) : 인수를 매개변수를 통해 함수에 전달하면서 함수의 실행을 명시적으로 지시하는 것
// 함수 정의
function add(x, y) { // 함수이름(매개변수1, 매개변수2)
	return x + y; // return 반환값;
}
// 함수 호출
add(2, 5); // 함수이름(인수1, 인수2)

12.2 함수를 사용하는 이유

  • 함수는 몇 번이든 호출할 수 있으므로 코드의 재사용이라는 측면에서 매우 유용하다.
  • 코드의 중복을 억제하고 재사용성을 높이는 함수는 유지보수의 편의성을 높이고 실수를 줄여 코드의 신뢰성을 높이는 효과가 있다.

12.3 함수 리터럴

  • 함수는 함수 리터럴로 생성할 수 있다.
  • 함수 리터럴은 function 키워드, 함수 이름, 매개변수 목록, 함수 몸체로 구성된다.
  • 함수 리터럴은 평가되어 값을 생성하며, 이 값은 객체다. 즉, 함수는 객체다.
  • 일반 객체는 호출할 수 없지만 함수는 호출할 수 있다.
// 변수에 함수 리터럴을 할당
var f = function add(x, y) {
	return x + y;
};

12.4 함수 정의

: 함수를 호출하기 이전에 인수를 전달받을 매개변수와 실행할 문들, 그리고 반환할 값을 지정하는 것

함수를 정의하는 방법 4가지

1. 함수 선언문

function add(x,y) {
	return x + y;
}

2. 함수 표현식

var add = function (x,y) {
	return x + y;
};

3. Function 생성자 함수

var add = new Function('x','y','return x+y');

4. 화살표 함수(ES6)

var add = (x,y) => x + y;

1. 함수 선언문

function add(x,y) {
	return x + y;
}
  • 함수 선언문은 함수 리터럴과 형태가 동일하다.
    단, 함수 리터럴은 함수 이름을 생략할 수 있으나, 함수 선언문은 함수 이름을 생략할 수 없다.

  • 함수 선언문은 표현식이 아닌 문이다.

  • 자바스크립트 엔진은 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성하고, 거기에 함수 객체를 할당한다.

  • 함수는 함수 이름으로 호출하는 것이 아니라 함수 객체를 가리키는 식별자로 호출한다.

2. 함수 표현식 (function expression)

: 함수 리터럴로 생성한 함수 객체를 변수에 할당하는 것
일급 객체 : 값의 성질을 갖는 객체

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

  • 함수 선언문으로 정의한 함수와 함수 표현식으로 정의한 함수의 생성 시점이 다르다.
  • 함수 선언문으로 정의한 함수는 함수 선언문 이전에 호출할 수 있다.
    함수 호이스팅 (function hoisting) : 함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징
  • 함수 선언문을 통해 암묵적으로 생성된 식별자는 함수 객체로 초기화된다.
  • 변수 할당문의 값은 할당문이 실행되는 시점, 즉 런타임에 평가되므로 함수 표현식의 함수 리터럴도 할당문이 실행되는 시점에 평가되어 함수 객체가 된다.

4. Function 생성자 함수

생성자 함수(constructor function)
: 객체를 생성하는 함수

var add = new Function('x','y','return x+y');
  • 함수 선언문이나 함수 표현식으로 생성한 함수와 Function 생성자 함수로 생성한 함수는 동일하게 동작하지 않는다.

5. 화살표 함수 (arrow function)

var add = (x,y) => x + y;
  • 화살표(fat arrow) 사용
  • 항상 익명 함수로 정의
  • 내부 동작의 간략화
  • 생성자 함수로 사용 불가능, 기존 함수와 this 바인딩 방식이 다르고, prototype 프로퍼티가 없으며 arguments 객체를 생성하지 않는다.

12.5 함수 호출

  • 함수 호출 연산자(함수를 가리키는 식별자 + 한 쌍의 소괄호)로 호출
  • 함수를 호출하면 현재의 실행 흐름을 중단하고 호출된 함수로 실행 흐름을 옮긴다.

1. 매개변수와 인수

  • 인수가 부족해서 인수가 할당되지 않은 매개변수의 값은 undefined 다.
  • 매개변수보다 인수가 더 많은 경우 초과된 인수는 무시된다.
  • 모든 인수는 암묵적으로 arguments 객체의 프로퍼티로 보관된다.

2. 인수 확인

a. 자바스크립트 함수는 매개변수와 인수의 개수가 일치하는지 확인하지 않는다.
b. 자바스크립트는 동적 타입 언어다. 매개변수의 타입을 사전에 지정할 수 없다.

3. 매개변수의 최대 개수

4. 반환문

profile
냐하

0개의 댓글