본문 바로가기

Programming/과거포스팅

클로저란?

출처 - 자바스크립트 완벽가이드

대다수의 현대 프로그래밍 언어와 마찬가지로 자바스크립트 또한 어휘적 유효 범위(lexical scoping)를 사용한다. 이는 함수를 호출하는 시점에서의 변수
유효 범위가 아니라, 함수가 정의되었을 때의 변수 유효범위를 사용하여 함수가 실행 된다는 뜻이다.
이러한 어휘적 유효범위를 구현하기 위해, 자바스크립트 함수 객체는 내부 상태에 함수 자체의 코드뿐만 아니라 현재 유효범위 체인에 대한 참조도 포함하고 있다.
함수 객체와 함수의 변수가 해석되는 범위(변수 바인딩의 집합)의 조합은 컴퓨터 과학 문헌에서 클로저(closure)라고 일컫는다.

클로저(closure) : 함수의 변수가 유효범위 체인에 바인딩되어 있고, 따라서 그 함수는 함수의 변수에 '따라 닫힌다'는 뜻에서 유래한 용어이다. 

기술적으로 모든 자바스크립트 함수는 클로저인데, 함수는 객체이고 함수 자신과 관련된 유효범위 체인을 사용하여 호출되고, 그 함수와 관련된 클로저의 유무 여부는
중요하지 않다.

필자가 머리가 나쁜지 이론적인 설명으로 클로저가 어떤건지 이해가 잘 되지 않았지만 코드를 보고 아 이것을 클로저라고 하는구나라고 개념이 잡혔다.
자바스크립트에서 함수와 그 내부의 변수의 유효적 범위는 자바나 기타 다른언어와 다르다. 이 유효적 범위를 클로저라고 하는것이다.
그래서 클로저를 처음 접하면 약간 혼란스러울지도 모른다.


var
scope = "global scope" function checkscope() { var scope = "local scope"; function f() { return scope; } return f(); } console.log(checkscope()); //결과는 local scope

'Programming > 과거포스팅' 카테고리의 다른 글

JAVA SHA1 암호화 기법  (0) 2013.04.17
CentOS Mongodb install  (0) 2013.04.16
메서드 체이닝(Method Chaining)  (0) 2013.04.13
centos 톰캣 설치  (0) 2013.04.09
스프링 프레임워크 .war tomcat에 올리는 방법  (0) 2013.04.09