인자(Argument) : 함수 실행 시 넘기는 값.
매개변수(parameter) : 인자로 받아온 값. 쉽게 더 말하면 함수 호출했을 때 넘어온 값
function test(x) {
if(x > 10) {
console.log(`${x}는 10보다 큽니다.`);
}
}
test(11)
여기서 function test(x) x가 매개변수, test(11)에 11이 인자.
function add(x, y){
return x + y;
}
const add = function (x, y){
return x + y;
}
const add = (x, y) => x + y;
아래의 코드로 확인해보자.
const fnc = (x, y) => {
return x + y;
}
console.log(fnc(10));
결과 : NaN
매개변수와 인자 개수를 맞추지 않아 y가 undefined로 들어가 결과가 NaN으로 나오는 것을 확인할 수 있다.
따라서, 이런 경우에는 ES6에서 도입된 방법으로 초기화 값(기본 값)을 지정할 수 있다.
const fnc = (x, y = 10) => {
return x + y;
}
console.log(fnc(10));
결과 : 20
const fnc = (x) => {
x++;
console.log(x)
fnc(x)
}
fnc(1)
위에 코드와 같이 재귀함수를 사용하면 stack overflow가 된 것을 확인할 수 있다. 따라서, 자신을 그만 호출되도록 제한하는 exit code를 넣어줘야한다.
const fnc = (x) => {
x++;
console.log(x)
if(x > 12) return; // exit code
fnc(x)
}
fnc(1)
이렇게 if문으로 x가 12보다 클 때 return을 해준다는 exit code를 작성해주면 자기 자신을 그만 호출하기 때문에 함수 실행이 종료되어 stack overflow도 되지 않는다.
이렇게 forEach문에 익명함수를 넣어 콜백함수로 사용할 수 있고,
let num = [1, 2, 3, 4, 5]
num.forEach(function (i){
console.log(i)
})
num.forEach((i) => {
console.log(i);
});
이렇게 함수명만 매개변수로 넣어 콜백함수를 실행할 수 있습니다.
const callBackFunc = () => {
console.log("콜백함수가 실행됩니다.");
};
const fnc = (param, callback) => {
console.log(`파라미터는 ${param}이고 고차함수가 먼저 실행됩니다. 그리고`);
callback();
};
fnc(10, callBackFunc);
여기서 고차함수라는 것이 있는데, 위에 코드에서 fnc가 고차함수이다.
고차함수(Higher-order Function)란 매개변수로 함수명을 받아와 콜백함수가 실행되기 전에 실행되는 함수이다.
1) call by value
let a = 1;
let add = function (b) {
b = b + 1
};
add(a);
console.log(a); // output: 1
2) call by reference
var a = { v : 1};
var add = function (b) {
b.v = b.v + 1,
};
add(a)
console.log(a.v); // output: 2