수학의 함수란 "입력(Input)"을 받아 "출력(Output)"을 내보내는 일련의 과정이다.
// 함수 정의
function add(x,y) { //add: 함수 이름, (x,y): 매개변수
return x + y; // x + y: 반환값
}
// 함수 호출
add (2,5); // (2,5): 인수
함수는 몇 번이든 호출할 수 있으므로 코드의 재사용 측명에서 유리하다.
또한, 코드의 중복을 줄이고 재사용성을 높이므로 유지보수의 편의성과 코드의 신뢰성을 높인다.
함수 리터럴은 function 키워드, 함수 이름, 매개 변수 목록, 함수 몸체로 구성된다.
함수를 호출하기 이전에 인수를 전달받을 매개변수와 실행할 문들, 그리고 반환할 값을 지정하는 것.
변수는 선언, 함수는 정의
함수 정의 방식은 4가지가 있다.
function add(x,y); {
return x + y;
}
console.dir(add); // f add(x,y)
console.log(add(2,5)); //7
함수 선언문은 식이 아닌 문이다.
함수는 객체다. 함수는 값처럼 변수에 할당할 수도 있고 프로퍼티 값이 될 수도 있고 배열의 요소가 될 수도 있다. 즉, 함수는 일급 객체이다. 다른 말로, 함수는 값처럼 자유롭게 사용될 수 있다.
var add = function add(x,y); {
return x + y;
};
console.log(add(2,5)); //7
함수 선언문은 함수 선언문 이전에 호출이 가능하지만 함수 표현식은 불가능.
함수 선언문은 런타임 이전에 먼저 실행되는 현상을 함수 호이스팅이라 한다.
함수 표현식으로 함수를 정의하면 변수 호이스팅이 된다. (undefined)
추천X
=>
와 같이 표현한다.
익명 함수이다.
식별자와 소괄호인 함수 호출 연산자로 호출한다.
함수 외부에서 함수 내부로 전달할 필요가 있는 경우 매개변수(인자)를 통해 인수로 전당한다.
매개변수는 함수 몸체 내부에서만 참조할 수 있고 함수 몸체 외부에서는 참조할 수 없다.
인수가 부족해 인수가 할당되지 않은 매개변수의 값은 undefined이다.
매개변수보다 인수가 더 많은 경우 초과된 인수는 무시한다.
이상적인 함수는 한 가지 일만 해야 하며 가급적 작게 만들어야 한다.
따라서 매개변수가 3개를 넘지 않을 것을 권장한다.
함수를 호출하면서 매개변수에 값을 전달하는 방식을 값에 의한 호출, 참조에 의한 호출로 구별해 부르기도 한다.
함수에서 원시 타입 인수를 변경하면 값 자체가 복사되어 매개변수에 전달되기에 함수 몸체에서 그 값을 변경해도 원본은 훼손되지 않는다.
함수에서 객체 타입 인수를 변경하면 참조 값이 복사되어 매개변수에 전달되기에 함수 몸체에서 참조 값을 통해 변경하면 원본이 훼손된다.
-> 불변 객체로 만들어 사용하거나 깊은 복사를 통해 새로운 객체를 생성하고 재할당해 사용한다.
함수 정의와 동시에 즉시 호출되는 함수.
단 한 번만 호출되며 다시 호출할 수 없다.
힘수가 자기 자신을 호출하는 것.
반복 처리를 위해 사용한다.
대부분의 재귀 함수는 for 문이나 while 문으로 구현 가능하다. 따라서 재귀 함수를 사용할 때 더 직관적으로 이해하기 쉬울 때만 한정적으로 사용해야 한다.
함수 내부에서 정의된 함수를 중첩 함수 또는 내부 함수라 한다. 또한, 중첩 함수를 포함하는 함수는 외부 함수라 한다.
중첩 함수는 외부 함수 내에서만 호출할 수 있다.
함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수라 하며 매개변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수를 고차 함수라 한다.
어떤 외부 상태에 의존하지 않고 변경하지도 않는 부수 효과가 없는 함수를 순수 함수라한다. 반대로, 외부 상태에 의존하거나 변경하는 부수 효과가 있는 함수를 비순수 함수라 한다.