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

1) 매개변수(parameter): 함수 내부로 전달 받은 변수
undefined다.2) 인수(argument, 인자): 입력
argument객체의 프로퍼티로 보관된다.3) 반환값(return value): 출력
함수가 일급 객체라는 것은 함수를 값처럼 자유롭게 사용할 수 있다는 것을 말한다.
// 함수 선언문은 표현식이 아닌 문이므로 변수에 할당할 수 없다.
// 하지만 함수 선언문이 변수에 할당되는 것 처럼 보인다.
var add = function add(x, y) {
return x + y;
};
console.log(add(2,5)); // 7
// 자바스크립트 엔진은 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성하고,
// 거기에 함수 객체를 할당한다.
function foo() {
console.log('foo');
}
foo(); // foo
undefined 대신 표현식이 평가되어 생성된 함수가 출력되어야 한다.함수 호이스팅(function hoisting)
: 함수 선언문이 코드의 선두로 끌어올려진 것 처럼 동작하는 자바스크립트 고유의 특징
undefined로 초기화 되지만// 함수 참조
console.log(add); // f add(x, y)
console.log(sub); // undefined
// 함수 호출
console.log(add(2, 5)) // 7
console.log(sub(2, 5)) // TypeError: sub is not a function
// 함수 선언문
function add(x, y) {
return x + y;
}
// 함수 표현식
var sub = function (x, y) {
return x - y;
};
: 함수 선언문으로 정의한 함수(런타임 이전)와 함수 표현식(런타임)으로 정의한 함수의 생성 시점이 다르기 때문에, 함수 선언문으로 정의한 함수는 함수 선언문 이전에 호출할 수 있지만, 함수 표현식으로 정의한 함수는 함수 표현식 이전에 호출할 수 없다.
반환문의 두가지 역할
① 반환문은 함수의 실행을 중단하고 함수 몸체를 빠져나간다.
② 반환문은 return 키워드 뒤에 오는 표현식을 평가해 반환한다. (명시적으로 지정하지 않으면undefined)
function multiply(x, y) {
return x * y; // 반환문
}
// 함수 호출은 반환값으로 평가된다.
var result = multiply(3, 5);
console.log(result); // 15
(※ 참조: 모던 자바스크립트 Deep Dive - 이웅모 저)