// 함수 정의
function add(x, y) {
return x + y;
}
// 함수 호출
add(2, 5) // 7
구성요소 | 설명 |
---|---|
함수 이름 | 함수 이름은 식별자임, 식별자 네이밍 규칙을 준수해야 함, 함수 몸체에서만 참조할 수 있는 식별자임, 함수 이름은 생략 가능함 |
매개변수 목록 | 0개 이상의 매개변수를 소괄호로 감싸고 쉼표로 구분함, 각 매개변수는 함수를 호출할 때 지정한 인수가 순서대로 할당됨, 매개변수는 함수 몸체 내에서 변수와 동일하게 취급됨, 매개변수도 식별자 네이밍 규칙을 준수해야함 |
함수 몸체 | 함수가 호출되었을 때 일괄적으로 실행될 문들을 하나의 실행 단위로 정의한 코드 블럭임, 함수 호출에 의해 실행됨 |
// 변수에 함수 리터럴을 할당함
var f = function add(x, y) {
return x + y;
}
/// 함수 선언문
function add(x, y) {
return x + y;
}
함수
함수 표현식 (function expression)
// 함수 표현식
var add = function(x, y) {
return x + y;
}
console.log(add(2, 5)); // 7
// 기명 함수 표현식
var add = function foo(x, y) {
return x + y;
}
// 함수 객체를 가리키는 식별자로 호출
console.log(add(2, 5)); // 7
// 함수 이름은 함수 몸체 내부에서만 유효한 식별자임
// 함수 이름을 함수 외부에서 호출하면 Reference Error가 발생함
console.log(foo(2, 5)); // Reference Error
함수 선언문으로 정의한 함수와 함수 표현식으로 정의한 함수의 생성 시점이 다름
함수 선언문의 생성 시점
함수 호이스팅과 var 변수 호이스팅의 공통점과 차이점
함수 표현식의 생성 시점
// Funtion 생성자 함수
var add = new Function('x', 'y', 'return x + y');
var add1 = (function () {
var a = 10;
return function (x, y) {
return x + y + a;
};
});
console.log(add1(1, 2)); // 13
var add2 = (function () {
var a = 10;
return new Function('x', 'y', 'return x + y + a');
});
console.log(add2(1, 2)); // Reference Error: a is not defined
// 화살표 함수
const add = (x, y) => x + y;
console.log(add(2, 5)); // 7