함수
함수란?
- 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것
- 구성요소
- 매개변수parameter: 입력을 전달받는 변수
- 인수arguemnt: 입력
- 반환값return value: 출력
- 함수 호출: 인수를 매개변수를 통해 함수에 전달하면서 함수의 실행을 명시적으로 지시
함수를 사용하는 이유
- 코드의 중복을 억제하고 재사용성을 높임 -> 유지보수의 편의성을 높이고 실수를 줄여 코드의 신뢰성 상승
함수 리터럴
- 함수는 객체 타입의 값이므로 리터럴을 통해 생성 가능함
- 구성요소: 함수이름, 매개변수 목록, 함수 몸체
- 일반 객체와의 차이: 일반 객체는 호출할 수 없지만 함수는 호출할 수 있음
함수 정의
- 함수 정의: 함수를 호출하기 이전에 함수를 전달받을 매개변수와 실행할 문들, 반환한 값을 지정하는 것
- 함수 정의 방식: 함수 선언문, 함수 표현식, Function 생성자 함수, 화살표 함수
// 함수 선언문
function add(x, y) {
return x + y;
}
// 함수 표현식
var add = function (x, y) {
return x + y;
};
// Function 생성자 함수
var add = new Function("x", "y", "return x + y");
// 화살표 함수
var add = (x, y) => x + y;
함수 선언문
- 함수 리터럴과 형태가 동일하나 함수 이름을 생략할 수 없다는 차이점이 있음
- 표현식이 아닌 문. -> 변수 할당 불가능
var add = function add(x, y) {
return x + y;
};
console.log(add(2, 5)); // 7
- 위 예제가 실행되는 이유는 자바스크립트 엔진이 코드 문맥에 따라 중의적 해석을 하기 때문. 함수는 함수 객체를 가리키는 식별자로 호출하므로 함수 이름 add가 아닌 변수명 add가 호출된 것
- 함수 선언문이 있을 경우 자바스크립트 엔진은 이를 해석해 함수 객체를 생성함. 이때 식별자가 없을 경우 암묵적으로 함수 이름과 동일한 이름의 식별자를 생성해 함수 객체를 할당함