설모의 기록

자바스크립트 함수 본문

언어/Javascript

자바스크립트 함수

HA_Kwon 2017. 12. 16. 19:59

스크립트 언어인 자바스크립트는 클래스 개념이 없습니다. 그러나 함수를 이용해 클래스처럼 구현할 수 있고, 객체를 생성할 수 있습니다. 자바스크립트에서의 함수의 특징은 일급객체라는 것과 유효범위를 생성한다는 것입니다. 


우선 자바스크립트에서 함수는 일급객체입니다. 일급 객체란 다음의 목록이 모두 가능한 객체를 말합니다.

  1. 변수나 데이터 구조 안에 담을 수 있다.
  2. 인자로 전달할 수 있다.
  3. 반환 값으로 사용할 수 있다.
  4. 런타임에 생성할 수 있다.
  5. 할당에 사용된 이름과 관계 없이 고유하게 식별할 수 있다.


자바스크립트에서는 자바와는 달리 for 문같은 반복문을 구현해도 그 안에서의 유효범위, 즉 스코프가 생성되지 않습니다. 이 말은 반복문 안에서 생성한 변수는 반복문 밖에서도 사용할 수 있다는 말입니다. 그러나 함수를 이용하면 함수내에서의 스코프가 생성되어 함수 내에서 선언한 변수들은 지역변수로 사용됩니다.



1. 함수의 종류

함수를 부르는 용어는 다음과 같습니다.

  1. 함수 선언문
  2. 함수 표현식 - 기명 함수 표현식, 무명 함수 표현식 (또는 익명 함수)

선언문과 표현식의 차이는 아래와 같습니다.

첫 번째로, 표현식에는 세미콜론을 붙이고, 선언문에는 세미콜론을 붙이지 않습니다. 

두 번째로, 호이스팅입니다. 자바스크립트에서는 유효범위 내에서 변수나 함수를 어느 곳에 선언을 했더라도 내부적으로 유효범위의 맨 위로 끌어올려지는 호이스팅이 일어납니다.  


위의 예제를 보면, foo 는 선언문이기 때문에 호이스팅되어 유효범위 제일 위인 console.log(typeof foo) 위로 끌어올려집니다. 그러나 bar 는 표현식이기 때문에 var bar; 가 호이스팅 될 뿐 표현식이 호이스팅되지는 않아 undefined 와 TypeError 가 발생합니다.



2. 즉시 실행 함수

즉시 실행 함수 패턴은 함수가 선언되자마자 실행되도록 하는 문법입니다. 즉시 실행 함수 패턴을 사용하기 위해서는 다음 순서를 지켜야 합니다.

  1. 함수를 함수 표현식으로 선언합니다.

  2. 함수를 변수에 할당하지 않으면 함수 전체를 괄호로 감쌉니다.

  3. 함수가 즉시 실행될 수 있도록 괄호쌍을 추가합니다.

아래는 예제입니다.


즉시 실행 함수의 장점은 모든 코드를 유효범위 내로 감쌌기 때문에 전역 유효범위로 새어나가지 않는다는 것입니다. 


위의 예제를 보면, 즉시 실행 함수 내에서 name 이라는 변수를 선언하고 name 변수를 반환해주는 함수를 반환합니다. 이 문법은 자바스크립트의 '클로저' 라는 개념을 사용했습니다. getName() 을 실행하면 "hyeona" 라는 값을 얻을 수는 있지만, name 이라는 변수에는 접근할 수 없습니다. 그래서 이러한 방식을 통해 숨기고 싶은 변수를 숨길 수 있습니다. 

'언어 > Javascript' 카테고리의 다른 글

async.waterfall() 메소드  (1) 2018.01.08
bcrypt-nodejs 모듈 사용하기  (0) 2018.01.08
Map 과 Set  (0) 2018.01.04
싱글톤(singleton) 패턴  (0) 2017.12.16
자바스크립트 메모이제이션(Memoization) 패턴  (0) 2017.12.16
Comments