자바스크립트에서 가장 중요한 함수에 대한 정리를 해보았다.
함수는 일련의 과정을 문(satement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다.
함수 내부로 입력을 전달받는 변수를 매개변수(parameter), 입력을 인수(argument), 출력을 반환값(return value)이라 한다.
함수는 필요할 때 여러번 호출할 수있다. 즉, 실행 시점을 개발자가 결정할 수 있고 몇 번이든 재사용이 가능하다.
코드의 중복을 억제하고 재사용성을 높이는 함수는 유지보수의 편의성을 높이고 실수를 줄여 코드의 신뢰성을 높이는 효과가 있다.
함수 리터럴은 function 키워드, 함수 이름, 매개변수 목록, 함수 몸체로 구성된다.
리터럴의 구성 요소는 함수이름, 매개변수 목록, 함수 몸체 등으로 구성되어있다.
즉, 리터럴은 값을 생성 하기 위한 표기법이다.
⭐️즉 함수는 객체다.
⭐️일반 객체는 호출할 수 없지만 함수는 호출 할 수 있다.
함수를 호출하기 이전에 인수를 전달받을 매개변수와 실행할 문들, 그리고 반환할 값을 지정하는 것을 말한다.
함수를 정의하는 방법은 4가지가 있다.
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;
자바스크립트 엔진은 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성하고, 거기에 함수 객체를 할당한다.
var add = funciton add(x,y) {
return x + y;
};
console.log(add(2,5)) // 7
*함수는 함수 이름으로 호출하는 것이 아니라 함수 객체를 가르키는 식별자로 호출한다. 즉, 함수 선언문으로 생성한 함수를 호출한 것은 함수 이름 add가 아니라 자바스크립트 엔진이 암묵적으로 생성한 식별자 add인 것이다.
위에서 언급했듯이 함수는 객체타입의 값이다.
이처럼 값의 성질을 갖는 객체를 일급 객체라 한다.
자바스크립트의 함수는 일급 객체다.
함수 선언문으로 정의한 함수를 함수 표현식으로 바꿔서 정의하면 다음과 같다.
var add = function(x,y){
return x + y;
}
console.log(add(2,5))//7
함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 함수 호이스팅이라 한다.
함수는 return 키워드와 표현식(반환값)으로 이뤄진 반환문을 사용해 실행 결과를 함수 외부로 반환할 수 있다.
function miltiply(x,y){
rutunr x * y; //반환문
}
//함수 호출은 반환값으로 평가된다.
var result = multiply(3,5);
console.log(result);//15
함수 호출은 표현식이다. return키워드가 반환한 표현식의 평가 결과, 즉 반환값으로 평가된다.
반환문은 두가지 역할을 한다.
1. 반환문은 함수의 실행을 중단하고 함수 몸체를 빠져나간다. 따라서 반환문 이후에 다른 문이 존재하면 그 문은 실행되지 않고 무시된다 .
funciton multiply(x,y){
ruturn x * y;//반환문
//반환문 이후에 다른 문이 존재하면 그 문은 실행되지 않고 무시된다.
console.log('실행되지 않는다.');
}
conosle.log(multiply(3,5))//15
function foo () {
return;
}
console.log(foo()) // undefinded