함수(function)는 자바스크립트 프로그램에 정의되어 있거나 자바스크립트 구현에 미리 정의되어 있는
실행 가능한 코드다. 함수는 한 번만 정의하면, 자바스크립트 프로그램 내에서 여러 번 실행될 수 있다.
함수는 계산 대상인 값들을 지정하는 전달인자(agument)나 매개변수(parameter)를 넘겨받을 수 있으며
계산 결과를 나타내는 값을 반환할 수도 있다. 자바스크립트 구현에는 특정 각에 대한 사인(sine) 값을
계산하는 Math.sin() 함수 같은 많은 수의 함수가 미리 정의되어 있다.
자바스크립트 프로그램에서는 다음과 같은 형태로 자신만의 함수를 정의할 수 있다.
{ // 함수 몸체가 여기서부터 시작한다.
함수가 일단 정의되면, 함수 이름에 이어서 옵션인 괄호로 둘러싸인 쉼표로 구분된 전달인자 목록을 적어주어 함수를 호출할 수 있다.(전달인자는 생략할 수도 있다). 다음은 몇 가지 함수 호출을 보여 준다.
y = square(x);
d = compute_distance(x1, y1, z1, x2, y2, z2);
move();
자바스크립트의 중요한 특징 중 하나는 함수도 자바스크립트 코드로 조작할 수 있는형태의 값이라는 점이다. 자바를 포함한 많은 언어에서 함수는 단지 언어의 문법적인 요소로서 존재한다. 함수는 단순히 정의하고
호출할 수 있는 것이지 데이터 타입은 아니다. 자바스크립트에서 함수가 실제로 값이라는 사실은 이 언어에 큰 유연성을 부여한다. 이것은 함수를 변수나 배열, 객체에 저장할 수 있으며 다른 함수의 전달인자로
넘겨 줄 수 있다는 것을 의미한다. 이런 점은 여러 면에서 유용하다. 함수를 정의하고 호출하는 방법과
함수를 데이터 값으로 사용하는 방법은 8장에서 논의한다.
함수도 숫자나 문자열처럼 값이므로 다른 값처럼 객체 프로퍼티에 할당될 수 있다. 함수가 어떤 객체의 프로퍼티로 할당되면(객체 데이터 타입과 객체 프로퍼티는 3.5절에서 설명한다), 흔히 그 객체의 메서드(method)라고 부른다. 메서드는 객체지향 프로그래밍에서 중요한 부분을 차지한다. 메서드에 관해서는 7장에서 좀 더 자세히 알아볼 것이다.
1. 함수 리터럴
앞 절에서 우리는 square()라는 함수를 정의했다. 대부분의 경우 자바스크립트 프로그램에서 함수를 정의할 때 이 함수 정의 문법을 사용한다. 그러나 자바스크립트는 함수를 정의하는 함수 리터럴 문법도 제공한다.
함수 리터럴은 function 키워드, 함수 이름(생략할 수 있다), 괄호로 둘러싸인 함수 전달인자 목록, 마지막으로 중괄호로 구성된다. 즉, 함수 리터럴은 함수 이름을 명시하지 않는다는 것을 제외하고는 함수 정의와 모양이 동일하다. 함수 정의와 함수 리터럴 간에 큰 차이점은 함수 리터럴은 자바스크립트 표현식 내에 나타날 수
있다는 점이다. 따라서 다음과 같이 함수 정의 문법으로 square()를 정의하는 대신,
함수 리터럴을 사용할 수 있다.
이름 없는 함수를 프로그램 내에 리터럴 형태로 포함시킬 수있게 한 최초의 언어인 Lisp 프로그램 언어를
기리는 의미에서 이러한 방식으로 정의된 함수를 람다함수(lambda function)라고 부른다.
지금은 프로그램에서 함수 리터럴을 사용할만한 명백한 이유를 떠올리기 힘들 테지만, 고급 스크립트를
작성할 때 함수 리터럴이 꽤나 편리하고 유용하게 사용될 수 있다는 것을 나중에 보여 주겠다.
함수를 정의하는 방법이 하나 더 있다.
그것은 전달인자 목록과 함수 몸체를 분자열 형태로 Function() 생성자에 전달하는 것이다. 예를 들어,
이러한 형태로 함수를 정의하는 방법은 그리 유용하지 않다. 함수 몸체를 문자열로 표현하는 것이 불편하기도 하고 많은 수의 자바스크립트 구현에서 이러한 식으로 정의된 함수는 다른 두 방법으로 정의된 함수보다 비효율적으로 작동한다.
'IT_Programming > JavaScript' 카테고리의 다른 글
자바스크립트 완벽가이드 - 3.6 배열 (0) | 2010.07.04 |
---|---|
자바스크립트 완벽가이드 - 3.5 객체 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 3.3 불리언 값 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 3.2 문자열 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 3.1 숫자 (0) | 2010.07.04 |