Javascript 함수

Written on November 25, 2015


여러가지 함수 표현식을 알아보고, 각각 어떻게 작동하는지 알아봅시다.

Javascript는 first-class object 이다.

Javascript는 함수를 선언 할 수도 있고, 변수에 할당 할 수도 있습니다. 후자의 개념은 혼란스럽고도 재미있다고 볼 수 있겠는데, 이러한 개념이 바로 first-class object 라고 합니다. 다른 특징들은 다음과 같습니다.

first-class object 특징
  1. ++변수에 저장할 수 있어야한다. (함수 선언방식과 표현방식)++
  2. 함수의 입력 파라미터로 사용할 수 있어야 한다.
  3. 함수의 출력 파라미터로 사용할 수 있어야 한다.
  4. 자료구조에 저장 가능해야 한다.

###함수선언 방식 vs 함수표현 방식### 선언 방식은 global 객체로 취급되어 가장 먼저 해석되어집니다. (Hosting 이라고 합니다) 함수 내에서 선언이 일어 났다면, 함수내 최상위로, 함수 바깥에서 정의 되었다면 전역 컨텍스트로 올라가는점을 염두하고 읽어 주세요.

######함수선언 방식은 global 객체로 취급된다.######

foo();	// 'hello'
function foo() {
    console.log('hello');
}; 
foo();
  1. 자바스크립트 엔진 구동시, global 영역에 있는 선언문인 function foo를 먼저 해석 합니다
  2. 글로벌 변수, 글로벌 함수는 자바스크립트 엔진 구동시 최초로 해석되어 집니다.
  3. 글로벌 선언은 어디에 선언 되어있건 실행 및 참조가 가능합니다.
  4. 너무 많은 글로벌 선언은 당연히 성능에 영향을 주게 됩니다.

######함수표현 방식은 변수에 함수를 할당 하는것으로, 런타임에 이루어 진다.######

foo();	// Uncaught TypeError: foo is not a function
var foo = function() {
    console.log('hello');
};
foo();

foo가 선언되기 전에 실행이 되면 에러가 발생합니다.

  1. 할당은 런타임에서 이루어 집니다.
  2. var foo 에 function 이 할당 되기 전에 사용 되었으므로, foo() 는 에러를 내뿜는다.

즉시 실행 함수

IIFE 라고도 합니다. (Immediately Invoked Function Expressions: “Iffy”라고 발음) 글로벌 스코프를 오염시키지 않기 위해 사용하는 기법중 하나 입니다.

######즉시실행함수 표현식######

alert(foo); // "foo" is not defined.
(function foo() {
    console.log('기명 즉시실행 함수표현식');
}());
alert(foo); // "foo" is not defined.

(function() {
    console.log('익명 즉시실행 함수표현식');
}());

참조한 링크