자바스크립트에서 함수(Function)란?
자바스크립트의 function은
Fisrt-Class-Object 로서 변수나 데이터 구조 안에 담을 수 있으며 인자로 전달할 수 있고 반환 값으로도 사용할 수 있으며 , 런타임에 생성할 수 도 있다.
함수와 익명함수
자바스크립트에서 함수를 정의하는 방법은 일반적으로 연산자인 function을 이용해서 정의 하는데, 함수선언문(function declaration)과 함수표현식(function expression)으로 나눠진다.
아래는 일반적인 함수 선언식이다.
함수선언식으로 정의된 함수는 자바스크립트 인터프리터가 스크립트가 로딩되는 시점에 바로 초기화하고 이를 변수객체(variable object)에 저장하기 때문에 함수 선언의 위치와는 상관없이 소스 내 어느 곳에서든지 호출이 가능합니다.
아래는 일반적인 함수표현식이다. 익명 함수표현식이라고도 한다.
함수표현식은 함수선언식과는 달리 스크립트 로딩 시점에 변수객체(variable object)에 함수를 저장하지 않고 runtime시에 해석되고 실행된다. 함수표현식과 함수선언식의 해석되고 실행되는 차이점을 반드시 알고 있어야 한다.
함수표현식이 실행코드로서 해석되기 위해서는 ()를 이용하여 함수를 감싸주면 되는데, 이를 자기호출함수(self invoking function)라고 한다. 자기호출함수는 함수 안에서 자신을 호출하는 재귀함수와는 다른 개념으로 해석과 동시에 실행된다.
아래는 여러가지 방식의 함수 표현식이다.
위의 예제 중에 "기명 함수표현식"의 경우 다른 함수표현식과 다른 특징이 있다. 바로 해당 함수의 이름은 함수밖에서는 사용할수 없다는 것이다. 예를 들면 아래와 같은 특징이 있다.
또 한가지 알고 넘어갈 것은 "익명 즉시실행 함수표현식"이 두가지가 있는데 두번째 방법이 자바스크립트의 대가 더글라스 클락포트 형님이 추천하는 권장 표기법이다.
jQuery나 Prototype 라이브러리는 동일한 $라는 글로벌 변수를 사용하기 때문에 두개의 라이브러리를 동시에 사용하게 되면 $ 변수에 대한 충돌이 생기게 된다. 하지만, 즉시실행함수에서 jQuery 사용을 위해 $ 변수를 사용하고자 한다면 아래와 같은 방법으로 $ 변수에 대한 overwritting을 예방할 수 있다.