붉은거위 노트 (redgoose note)

함수의 개요

Nest
Development
Category
Javascript
Hit
450
Star
0

개요

  • 함수란 일단 한번 정의되면 임의 횟수에 걸쳐서 호출되거나 실행될 수 있는 자바스크립트 코드블럭이다.
  • 함수는 배개변수(parameter) 혹은 전달인자라 불리는 지역 변수를 가질 수 있는데 이러한 변수의 값는 함수가 호출되는 시점에 주어진다.

함수의 정의

가장 일반적인 정의 방법으로는 function문을 사용한다. function문의 구성으로는

  • 함수의 이름
  • 괄호() 안에 0개 혹은 임의 개수의 매개변수 이름을 쉼표로 분리한 목록
  • 중괄호{} 안에 함수의 몸체를 구성하는 자바스크립트 문장들
function print(msg) {
    document.write(msg, "<br />");
}

// 두 점 사이의 거리를 계산
function distance(x1, y1, x2, y2) {
    var dx = x2 - x1;
    var dy = y2 - y1;
    return Math.sqrt(dx*dx + dy*dy);
}

// 계승(factorial) 팩토리얼 값을 계산하는 재귀함수(자기 자신을 호출하는 함수)
function factorial(x) {
    if (1 >= x)
        return 1;
    return x * factorial(x-1);
}
  • 만약 return문에 연결된 표현식이 없다면 함수는 undefined값을 반환한다.
  • 자바스크립트는 함수가 기대하는 타입의 데이터를 전달하는지 검사하지 않는다.
  • 만약 함수가 기대하는 개수보다 많은 수의 전달인자를 전달하면 함수는 이런 추가분의 전달인자들을 무시한다.
    만약 함수가 기대하는 개수보다 적은수의 전달인자를 전달하면 빠뜨린 매개변수에서는 undefined값이 할당된다.

중첩된 함수

함수는 다른 함수안에 중첩되어 사용할 수 있다.

function hypotenuse(a, b)
{
    function square(x) { return x * x; }
    return Math.sqrt(square(a) + square(b));
}

중첩된 함수는 중첩되어 위치하는 함수의 최상위 레벨에서만 정의될 수 있다. 그래서 if문이나 while 루프의 몸체같은 문장 블록 안에서는 정의될 수 없다.

함수 리터럴

함수 리터럴은 이름없는 함수를 정의하는 데 사용되는 표현식이다.

function f(x) { return x * x; } // function 문
var f = function(x) { return x * x; }; // 함수 리터럴

하지만 이름을 넣는것도 허용이 된다. var f = function fact(x) { if (1 >= x ) return 1; else return x * fact(x-1); };

  • 함수 리터럴은 자바스크립트 문장이 아니라 표현식으로 생성된다.
  • 함수 리터럴은 유연하며, 한번 사용되고 버려지기 때문에 일회용 함수로 사용하는데 적합하다.

함수이름 붙이기

  • 관습적으로 함수 이름은 소문자로 시작한다.
  • 함수 이름이 둘 이상일때 단어와 단어를 like_this()같이 밑줄을 넣거나 likeThis()같이 첫번째 단어 이후의 모든 단어를 대문자로 시작하는 관습이 있다.
  • 내부적으로 사용하거나 숨겨진 함수로 사용하려면 밑줄 문자로 함수 이름을 시작한다.