메소드
자바스크립트는 기본적으로 자료형을 정의하지 않아도 된다. (자료형이 존재하지 않는다는 뜻이 아니다. 언어 자체가 하나의 변수에 대한 자료형을 자동적으로 변환해주기 때문에, 정의할 필요가 없을 뿐이다)
그로 인해서 자바스크립트는 메소드, 즉 함수의 정의와 호출 역시 방법이 달라지게 된다.
메소드 정의 방법(1)
자바스크립트가 자료형에서 자유롭다는 특징을 단적으로 보여주는 사례라고 볼 수 있다. C언어의 함수 정의와 비슷하지만 자료형의 정의만 빠져있다.
C언어의 경우 자료형 함수명(자료형 인자명1, 자료형 인자명2, …){ // 함수 실행 return 자료형에 맞춘 값; }
자바스크립트의 경우 function 함수명(인자명1, 인자명2, …){ // 함수 실행 return 값; }
자료형에서 자유롭다.
메소드의 정의 방법(2)
자바스크립트는 여러가지 방법으로 인해 생성한 변수에 메소드를 넣는것이 가능하다.
-
var 객체명 = new Object(); // var 객체명 = {}; 과 동일
객체명.함수명 = function(인자명1, 인자명2, ...){
// 함수 실행...
};
ex)
var sum = new Object();
sum.calc = function(num1, num2){
return num1 + num2;
};
-
var 변수명 = function(인자명1, 인자명2, ...){
// 함수 실행...
};
ex)
var sum = function(num1, num2){
return num1 + num2;
};
메소드 자체에는 이름이 없으나, 객체의 속성(또는 변수)의 이름을 빌려서 호출되기에, 이러한 구조의 함수를 익명 함수(Anonymous function) 라고 한다.
자세히 보면 메소드의 정의방법 (1)과 (2)에는 정의방법 이외의 차이점도 있다. (1)에서는 함수의 정의 뒤에 세미콜론(;)이 없지만 (2)에서는 세미콜론(;)이 존재한다는 점이다.
그 이유는 (1)과 달리 (2)의 정의방법은 함수의 정의와 동시에 객체의 속성(또는 변수)에 값(여기서는 함수 자체)을 대입시키는 표현식(Expression)의 형태가 되므로, 세미콜론(;)을 붙여주는게 코딩 표준에 가깝다는 것이다. (사실 자바스크립트는 세미콜론이 없어도 코딩에 오류가 나지 않지만, 보기 좋게 하자는 이유다..)