프로그래밍의 함수는 수학에서의 함수와 그 뜻이 동일하다. 입력값(input)을 받아 출력값(output)을 내보내는 일련의 과정을 함수하고 한다.
함수는 함수 정의(function defination)를 통해 생성되고 함수 호출(function call/invoke)을 통해 실행된다. 함수를 정의하는 방법과 특징은 다음과 같다.
function add(a, b) {
return a + b;
}
const multiply = function(a, b) {
return a * b;
};
const divide = (a, b) => a / b;
const calculator = {
square(x) { // = square: function(x) {}
return x ** 2;
}
};
// 생성자 함수 정의
const sum = new Function('a', 'b', 'return a + b');
console.log(sum(2, 3)); // 5
// 동적 함수 생성 예시
const operation = 'multiply';
const dynamicFunc = new Function(
'x',
'y',
`return x ${operation === 'multiply' ? '*' : '+'} y`
);
console.log(dynamicFunc(4, 5)); // 20
함수의 장점:
함수를 정상적으로 호출하고 결과를 얻기 위해선 매개변수, 인수, 반환문 간의 관계를 이해해야 한다.
함수를 호출할 때 인수로 객체를 전달하면 참조 전달이 이루어진다. 이때문에 함수 내부에서 객체를 수정하면, 이 변경사항이 원본 객체에도 동일하게 발생한다. 이를 방지하기 위해서는 원본 객체를 직접 전달하지 않고 깊은 복사가 이루어진 새로운 객체를 인수로 전달해야 한다.
그리고 이처럼 외부 상태를 변경하지 않고 외부 상태에 의존하지도 않는 함수를 순수 함수라고 부른다. 즉, 동일한 입력에 대해 동일한 출력을 보장하는 함수다.