
// 1
function square(x){ return x*x; }
// 2
var square = function(x){ return x*x; }
// 3
var square = new Function("x", "return x*x");
// 4
var square = x => x*x;
특정 함수의 내부에 선언된 함수를 가리킨다. 지역함수 또는 내부함수라 한다.
외부 함수의 최상위 레벨에만 중첩 함수를 작성할 수 있다.
// 1
var s = square(5);
// 2
obj.m = function(){...};
obj.m();e
// 3
var obj = new Object();
익명 함수의 참조를 변수에 할당한 후에 그룹 연산자인 ( )을 붙여 실행한다.
var f = function(){...};
f();
// 정의와 실행을 동시에
(function(){...}());
(function(){...})();
(function fact(n){
if(n <= 1) return 1;
return n * fact(n-1);
})(5); // 120
함수가 자기 자신을 호출하는 행위를 재귀호출이라 하고, 재귀호출을 수행하는 함수가 재귀함수이다.
// n의 팩토리얼을 구하는 함수
function fact(n){
if(n <= 1) return 1;
return n * fact(n-1);
}
fact(5); //120
유의사항
// 카운터 함수를 만드는 함수
function makeCounter(){
var count = 0;
return f;
function f(){
return count++;
}
}
var counter = makeCounter();
console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter()); // 2
// 익명함수로도 가능하다.
function makeCounter(){
var count = 0;
return function (){
return count++;
}
}
* 포인트
자바스크립트의 함수는 Function 객체이다.
특징
// 피보나치수열을 구하는 함수
function fibo(n){
if(n<2) return n;
if(!(n in fibo)){
fibo[n] = fibo(n-1) + fibo(n-2);
}
return fibo[n];
}
for(var i=0; i <= 20; i++){
console.log((" "+i).slice(-2)+":"+fibo(i));
}
// 결과
// 0:0
// 1:1
// 2:1
// 3:2
// ...
// 19:4181
// 20:6765
자바스크립트 함수는 다른 함수에 인수로 넘겨질 수 있다.
다른 함수에 인수로 넘겨지는 함수를 콜백 함수라 한다.
// g가 콜백함수다.
f(g, ...);
...
function f(callback, ...){
...
callback();
...
}
// 이벤트 처리기를 addEventListener 메서드의 인수로 넘겨서 등록
button.onclick = function(){...};
button.addEventListener("click", function(){...}, false);
// 타이머
// 첫 번째 인수가 콜백함수
setInterval(function(){...}, 2000);