클로저(Closure)
1. 정의
- 자신의 범위(scope) 밖에 있는 변수의 접근 하는 함수 ?
- Closures are functions that refer to independent (free) variables (variables that are used locally, but defined in an enclosing scope). In other words, these functions 'remember' the environment in which they were created. ?
- 외부함수의 실행이 끝나더라도 내부함수는 외부 함수의 변수에 접근할 수 있는 로직?
- MDN에서 정의한 클로저에 따르면 독립적인 변수를 참조하는 함수이며 이 함수들은 그들이 생성된 환경을 기억한다라고 한다
- 몬소린지 정확히 모르겠다.- -
- 클로저(Closure) == 함수, 클로저(Closure) 는 변수에 접근한다
- 생성자 내에서 전용 변수를 참조하는 함수안의 함수
2. 외부함수와 내부함수
1) 예
- 실행 결과: Hee
2) 내부함수
- 내부함수는 외부함수의 변수(var name) 의 접근이 가능하다
3. 내부함수와 클로저(Closure)
- 내부함수와 클로저는 깊은 연관 관계가 있다
- 클로저로 인해 외부함수의 생명이 끝나더도 외부 함수의 변수에 접근이 가능하다
1) 예제1
- 실행 결과 : Hee
- 다른 프로그램언어 (ex:java)를 보면 함수의 return은 곳 함수의 실행 종료, 함수의 생명 끝 이라는 말 과 같다
- 위의 상황
1) closure 라는 함수 객체에 외부함수 리턴 값 저장(상식적으로? return했으니 외부함수(outerFun() 끝)
2) closure() 실행
3) 내부함수 innerFun()이 실행되며 그 안에 외부함수 변수 값 참조
2) 예제2
- 실행결과 : 6
- 외부함수의 파라미터 값은 함수의 지역 변수가 된다
- 위의 상황
1) closure 라는 객체에 sum(2) 에 해당하는 return 값을 저장한다
2) closure(4) 를 실행하면 내부함수의 return 값이 실행된다
4. 결론
The solution to this puzzle is that closure has become a closure. A closure is a special kind of object that combines two things: a function, and the environment in which that function was created. -MDN
- 결국 클로저란 함수, 혹은 하나의 메커니즘이라고 이해했다. 정확히 말하자면 함수 + 함수가 생성되는 환경 을 종합적으로 말하는 것 같다
'Javascript > Core' 카테고리의 다른 글
[Javascript] 자바스크립트 유효범위(Scope) 와 유효범위 체인(Scope chain) (0) | 2016.12.09 |
---|---|
[Javascript] 자바스크립트의 상속 prototype (0) | 2016.12.09 |
[Javascript] 자바스크립트의 Prototype(프로토타입) (0) | 2016.12.08 |
[Javascript] Loop 안의 클로저(Closure) - Closure in loop (0) | 2016.12.07 |
[Javascript] 클로저를 이용한 private 메소드 - Emulating private methods using closures (0) | 2016.12.07 |