자바스크립트 JS - 클로저 (Closure)
📖 Review (21.04.01)
클로저 (Closure)
외부함수에 접근할 수 있는 내부함수
외부함수에 접근할 수 있는 내부함수
정의: 함수와 함수가 선언된 어휘적(lexical) 환경의 조합, 이 환경은 클로저가 생성된 시점의 유효범위 내에 있는 모든 지역 변수로 구성된다.
조금 더 쉽게 말하자면, 함수 내에서 다른 함수(내부 함수)가 리턴이 되면, 이 함수를 클로져 함수라고 부르고, 외부 함수에 있는 변수에 접근 가능하다.
쉽게 말하자면 밖에서는 안이 보이지 않고 안에서는 밖을 볼 수 있다. ex)썬팅된 차량
클로저는 자바스크립트 고유의 개념이 아니라 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어(Functional Programming language: 얼랭(Erlnag), 스칼라(Scala), 하스켈(Haskell), 리스프(Lisp)…)에서 사용되는 중요한 특성이다.
다음 예제 코드를 보자,
function init() {
var name = "Mozilla"; // name은 init에 의해 생성된 지역 변수이다.
function displayName() { // displayName() 은 내부 함수이며, 클로저다.
alert(name); // 부모 함수에서 선언된 변수를 사용한다.
}
displayName();
}
init();
-
init()
은 지역 변수name
과 함수displayName()
을 생성한다. -
displayName()
은init()
안에 정의된 내부 함수이며init()
함수 본문에서만 사용할 수 있다. -
여기서 주의할 점은
displayName()
내부엔 자신만의 지역 변수가 없다는 점이다. 그런데 함수 내부에서 외부 함수의 변수에 접근할 수 있기 때문에displayName()
역시 부모 함수init()
에서 선언된 변수name
에 접근할 수 있다. 만약displayName()
가 자신만의name
변수를 가지고 있었다면,name
대신this.name
을 사용했을 것이다.
Author And Source
이 문제에 관하여(자바스크립트 JS - 클로저 (Closure)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hwjeong95/자바스크립트-JS-클로저-Closure저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)