function add(x, y){
return x + y;
};
함수 선언문 방식으로 함수 선언
함수 리터럴방식과 형태는 같음.
반드시 함수명이 정의되 있어야 함.
함수 표현식(함수 호이스팅이 되지 않음)
변수를 할당하는 것과 마찬가지로 함수를 생성하는 방법
var add = function(x, y){
return x + y
}
익명함수와 기명함수
이름이 없는 함수는 익명함수, 이름이 있는 함수를 기명함수 표현식이라고 함.
var add = function sum() {
return x + y;
};
//함수 호출
add(3,4); // 7
sum(3,4) // Uncaught ReferenceError : sum is not defined()
함수표현식의 경우, 자바스크립트 엔진에 의해, 함수의 이름이 변수명에 적용되게 됨.
코드의 변경흐름은 다음과 같다.
var add = function add(x, y)
return x + y);
}
함수표현식에서의 함수이름은 선택사항이지만, 함수이름을 이용하여 함수 코드 내부에서 재귀 호출이 가능함.
var factorialVar = function factorial(n) {
if(n <= 1) {
return 1;
}
return n * factorial(n-1);
}
console.log(factorialVar(3));
// 코드 실행순서
// 1. 함수에 함수변수명이 적용됨.
factorialVar = function factorialVar(3){
// 2. if문을 체크하지만 해당사항이 없음.
if(n < = 1) {
return 1;
}
// 3. 함수 내부에서 자기자신(원래의 자기 함수명)을 호출시킴에 따라, return문이 실행됨.
return n * factorial(n-1);
// 3 * (3-1) == 6
// return 값은 6이 출력됨.
}
함수 선언문(function statement)과 함수 표현식(function expression)에서의 세미콜론
함수 선언문 방식 : 함수 끝에 세미콜론(;)을 붙이지 않음
함수 표현식 방식 : 함수 끝에 세미콜론(;)을 붙이는 것을 권장.
var func = function() {
return 42;
}
(function () {
console.log("function called");
})();
// number is not a function 에러 발생
에러 발생 이유는, 자바스크립트 파서가 중괄호 이후에 세미콜론(;)이 없음에 따라, 함수가 끝났다고 판단하지 않아 func()함수를 호출하게 된다.
이러한 문제로 함수표현식 방식에서는 끝에 세미콜론(;)을 강력하게 권고한다.
Function()생성자 함수를 통해 함수 생성
new Fuction(arg1, arg2, ... argN, functionBody)
Function안에 매개변수와 함수가 호출될 때 실행될 코드를 포함한 문자열을 집어넣는다.
var add = new Function('x', 'y', 'return x + y');
console.log(add(3, 4)); // 7
자주 사용되지는 않음.