티스토리 뷰

자바스크립트에서 함수의 존재는 아주 자유롭다. -_- 훨훨~ 

표현 및 호출이 제약이 거의 없다고 생각한다. 심지어 함수명 따윈 필요치 않다. 아래예제를 보자.

var square = function(number) {return number * number};

sqaure 라는 변수가 가리키는 것은 데이터가 아닌 바로 함수이다. 이름없는 함수를 가르키고 있다. 

square 라는 변수를 어떻게 사용해야 원하는 결과를 얻을 수 있을까.

console.log(square(5)); // 25 라고 출력된다.

console.log 는 로그 출력하는 함수일 뿐이다. 이와같이 함수를 호출하듯이 파라메터를 넣으면 결과를 리턴받을 것이고 그것을 출력하면 된다. 함수명과 다를바가 없다. 하지만 이건 지역변수 선언하듯 선언한 것이므로 로직이 끝나면 결국 가비지컬렉터가 수거해 갈 것이다.



재귀함수시에는 어떻게 할까. 내부적으로 자기자신을 계속호출해야하므로 fac 라는 함수명을 명시해서 사용하고 있다.

// 익명함수(anonymous)를 사용한 경우
var factorial = function fac(n) {return n<2 ? 1 : n*fac(n-1)};
console.log(factorial(3));


// 일반적인 경우. 조건절이 조금 다르지만 위와 같은 표현이라고 보면 된다.
function factorial(n){
  if ((n == 0) || (n == 1))
    return 1;
  else
    return (n * factorial(n - 1));
}

var a, b, c, d, e;
a = factorial(1); // a gets the value 1
b = factorial(2); // b gets the value 2
c = factorial(3); // c gets the value 6
d = factorial(4); // d gets the value 24
e = factorial(5); // e gets the value 120



인자값으로 함수자체를 받아 사용하는 경우도 있다. 조금씩 어려워진다.

function map(f,a) {
  var result = [], // Create a new Array
      i;
  for (i = 0; i != a.length; i++)
    result[i] = f(a[i]);
  return result;
}

map(function(x) {return x * x * x}, [0, 1, 2, 5, 10]);  // returns [0, 1, 8, 125, 1000]


반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함