// 함수 정의
function add(x, y) { // 매개변수(입력을 전달받는 변수)
return x + y; // 반환값
}
// 함수 호출
add(2, 5); // 인수(입력) => 매개변수로 전달
function
키워드, 함수명, 매개변수, 함수 몸체로 구성var f = function add(x, y) { // 함수명, 매개변수
// 함수 몸체
return x + y;
};
설명 | |
---|---|
함수명 | - 식별자 네이밍 규칙 준수해야함 - 함수 몸체 내에서만 참조 가능 - 생략 가능 (함수명 있으면 기명 함수, 없으면 무명/익명 함수) |
매개변수 | - 각 매개변수에 함수 호출 시 지정한 인수 순서대로 할당됨 - 함수 몸체 내에서 변수로 취급 => 식별자 네이밍 규칙 준수해야함 |
함수 몸체 | - 함수 호출에 의해 실행됨 |
function add(x, y) {
return x + y;
}
// 기명 함수 표현식
var add = function add(x, y) {
return x + y;
}
// 익명 함수 표현식
var add = function(x, y) {
return x + y;
}
undefined
가 할당됨undefined
로 평가 => 타입 에러 발생var add = new Function('x', 'y', 'return x + y');
const add = (x, y) => x + y;
함수가 호출되면 함수 몸체 내에서 암묵적으로 매개변수가 생성되고 일반 변수처럼 undefined
로 초기화된 후 인수가 순서대로 할당된다.
함수는 매개변수와 인수의 개수가 일치하는지 체크하지 않으므로, 인수가 부족해서 인수가 할당되지 않은 매개변수의 값은 undefined
가 되고, 에러가 발생하지 않는다.
매개변수보다 인수가 더 많은 경우에는 초과된 인수는 암묵적으로 arguments 객체의 프로퍼티로 보관된다.
자바스크립트는 함수의 매개변수와 인수의 개수가 일치하는지 확인하지 않고, 동적 타입 언어이기 때문에 매개변수의 타입을 사전에 지정할 수 없다.
따라서 함수를 정의할 때 적절한 인수가 전달되었는지 확인할 필요가 있다.
undefined
반환// 그룹 연산자 사용
(function() {
var a = 3;
var b = 5;
return a * b;
}());
// 반복문 사용
function countdown(n) {
for (var i = n; i >= 0; i--) {
console.log(i);
}
}
countdown(10);
// 재귀함수 사용
function countdown(n) {
if (n < 0) return;
console.log(n);
countdown(n - 1); // 재귀 호출
}
countdown(10);
function outer() {
var x = 1;
// 중첩 함수
function inner() {
var y = 2;
// 외부 함수의 변수 참조 가능
console.log(x + y); // 3
}
inner();
}
outer();
// myButton 클릭 시 콜백 함수 실행
document.getElementById('myButton').addEventListener('click', function() {
console.log('button clicked!');
});
// 1초 후에 메시지 출력
setTimeout(function() {
console.log('1초 경과');
}, 1000);
// 배열 고차 함수 map
var res = [1, 2, 3].map(function(item) {
return item * 2;
});
console.log(res); // [2, 4, 6]
var count = 0;
// 순수 함수
function increase(n) {
return ++n;
}
// 순수 함수 반환값을 변수에 재할당 => 상태를 변경
count = increase(count);
console.log(count); // 1
count = increase(count);
console.log(count); // 2
var count = 0;
// 비순수 함수
function increase() {
return ++count; // 외부 상태 직접 참조 => 외부 상태 변경
}
increase();
console.log(count); // 1
increase();
console.log(count); // 2