Knowledge Map

자바스크립트 클로저1 본문

WEB/JAVASCRIPT

자바스크립트 클로저1

2016. 8. 2. 09:01

출처 : 인사이드 자바스크립트


자바스크립트에서 함수는 일급객체 이다.


일급객체(First Class)인 함수 Function은 아래와 같은 동작이 가능하다.


  • 리터럴에 의해 생성
  • 변수나 배열의 요소, 객체의 프로퍼티 등에 할당 가능
  • 함수의 인자로 전달 가능
  • 함수의 리턴값으로 리턴 가능
  • 동적으로 프로퍼티를 생성 및 할당 가능

따라서 일급객체인 특성을 가지고 있는 자바스크립트 함수는 함수형 프로그래밍이 가능하다.


여기서 숫자, 문자열, 불린값, null undefined 는 기본타입으로 '값에 의한 호출' Call By Value  방식으로 동작하고

그 외에는 참조타입으로 '참조에 의한 호출' Call By Reference 방식으로 동작한다.


클로저가 왜 필요한지 그 이유는 많지만 그 중 하나만 보자면 자바스크립트의 참조타입 때문이다.

아래의 간단한 코드를 보면 위, 아래 각각 버튼이 4개씩 존재한다.

그리고 그것들을 클릭할 경우 간단한 alert 창이 뜨도록 해놓았다.


1-1 ~ 1-4 를 눌러보면 전부 4라고 뜬다.

2-1 ~ 2-4 를 눌러보면 0, 1, 2, 3 라고 뜬다.


1-1 ~ 1-4 에서는 i의 값이 최종적으로는 4로 끝났고, 각각의 함수가 실행할때 최종 값인 i=4 값을 참조하기 때문이다.

하지만 2-1 ~ 2-4는 각각의 값이 나오는데 이것은 t2 함수가 리턴할 때 해당되는 숫자를 포함한 상태로 메소드를 리턴하기 때문이다.


즉 클로저는 '이미 생명 주기가 끝난 외부 함수의 변수를 참조하는 함수' 인것이다. 



위의 코드는 아주 간단한 예제지만 저렇게 각 요소에 for 문으로 실행하면서 각각 다른 값을 넣어줄때 클로저를 사용해주면 편하다.

'WEB > JAVASCRIPT' 카테고리의 다른 글

javascript - arguments  (0) 2016.08.04
javascript - this1  (0) 2016.08.03
브라우저 간 통신  (0) 2016.07.22
form POST로 sumit  (0) 2016.07.19
커스텀 오른쪽 마우스 메뉴(2)  (0) 2016.07.03
Comments