함수는 과정을 문으로 구현하고 코드 블럭으로 감싸서 하나의 실행 단위로 정의한 것이다.
함수 정의란, 함수 호출하기 전에 매개변수, 실행 문, 반환 값을 지정하는 것이다.
function add(x, y) {
return x + y;
}
var add = function (x, y) {
return x + y;
};
var add = new Function("x", "y", "return x + y");
var add = (x, y) => x + y;
undefined
다.function add(x, y) {
return x + y;
}
console.log(add(2)); // NaN
// typeof 연산자 사용
function add(x, y) {
if (typeof x !== "number" || typeof y !== "number") {
throw new TypeError("인수는 모두 숫자값 이어야 합니다.");
}
return x + y;
}
console.log(add(1, 2)); // 3
console.log(add(2)); // TypeError: 인수는 모두 숫자값 이어야 합니다.
console.log(add("a", "b")); // TypeError: 인수는 모두 숫자값 이어야 합니다.
// "단축 평가"로 arguments 문제 방지
function mul(a, b, c) {
a = a || 1;
b = b || 1;
c = c || 1;
return a * b * c;
}
console.log(mul(1, 2, 3)); // 6
console.log(mul(1, 2)); // 2
console.log(mul(1)); // 1
console.log(mul()); // 1
// 매개변수 기본값 사용
function sub(a = 0, b = 0) {
return a - b;
}
console.log(sub(10, 9)); // 1
console.log(sub(10)); // 10
console.log(sub()); // 0
function changeVal(primitive, obj) {
primitive += 100;
obj.name = "LEE";
}
// 외부 상태
var num = 100; // 원시 값
var person = { name: "KIM" }; // 객체
console.log(num); // 100
console.log(person); // { name: 'KIM' }
changeVal(num, person);
console.log(num); // 100
console.log(person); // { name: 'LEE' }
Immediately Invoked Fuction Expression
함수 정의와 동시에 즉시 호출되는 함수이다.
( ... )
로 감싸야 한다.(function () {
/// ...
})();
반복되는 처리를 반복문 없이 구현할 수 있지만, 무한 반복에 빠질 수 있고 스택 오버플로 에러를 발생시킬 수 있다.
함수 내부에 정의된 함수이다
function outer() {
var x = 1;
// 중첩 함수 == 내부 함수
function inner() {
var y = 2;
// 외부 함수의 변수 참조
console.log(x + y); // 3
}
inner();
}
outer();
함수의 매개변수를 통해 다른 함수 내부로 전달되는 함수이다.
고차 함수(Higher-Order Function, HOF)
라 한다.// 외부에서 전달받은 func 를 n 만큼 반복 호출 - 고차 함수 repeat
function repeat(n, f) {
for (var i = 0; i < n; i++) {
f(i);
}
}
// 콜백 함수 정의 - logAll
var logAll = function (i) {
console.log(i);
};
// 반복 호출할 함수를 인수로 전달
repeat(5, logAll); // 0 1 2 3 4
// 콜백 함수 정의 - logOdd
var logOdd = function (i) {
if (i % 2) console.log(i);
};
// 반복 호출할 함수를 인수로 전달
repeat(5, logOdd); // 1 3