IT_susu

클로져 (Closure)와 실행 컨텍스트 본문

[ javascript ]/JavaScript

클로져 (Closure)와 실행 컨텍스트

고베베 2018. 10. 30. 19:10

lecical environment : 선언 당시의 환경에 대한 정보를 담는 객체


클로저

= 함수와 그 함수가 선언될 당시의 환경정보 사이의 조합

= 함수 내부에서 생성한 데이터와 그 유효범위(스코프)로 인해 발생하는 특수한 현상 / 상태

= javascript의 매우 강력한 특성으로 독립적인 변수를 참조하는 함수. ( 클로저에 정의된 함수는 그것이 작성된 환경을 '기억'합니다. )

- 함수 안에서 다시 함수를 return하면 최초 선언시의 정보를 유지


클로저 형성 시기

모든 함수에는 실행 컨텍스트가 있습니다. 실행 컨텍스트는 해당 함수 내의 변수와 해당 함수의 부모 환경에 대한 참조를 의미하는 환경으로 구성됩니다.

상위 환경에 대한 참조는 내부 함수가 작성된 범위 외부 또는 내부에서 호출되는지 여부에 관계없이, 즉 실행 시가 아닌 선언 시에 클로저가 형성되어

상위 범위의 모든 변수를 모든 내부 함수에 사용할 수 있게 합니다.


클로저 활용

1) 접근 권한 제어

2) 지역변수 보호

3) 데이터 보존 및 활용



클로저를 활용하여 private한 변수 만들기

1. 함수에서 지역변수 및 내부함수 등을 생성한다.

2. 외부에 노출시키고자 하는 멤버들로 구성된 객체를 return한다.

(-> return 한 객체에 포함되지 않은 멤버들은 private하다.)

(-> return한 객체에 포함된 멤버들은 public하다.)



실행 컨텍스트

ECMAScript 사양에서 코드의 런타임 평가를 추적하는 데 사용되는 추상개념입니다. 

어느 시점이든 하나의 실행 컨텍스트만 실행될 수 있으며, 이는 javascript가 '단일 스레드'인 이유입니다.

즉, 한 번에 하나의 명령만 처리할 수 있습니다.

일반적으로 브라우저는 "스택"을 사용하여 이 실행 컨텍스트를 유지 관리합니다.

스택은 Last In First Out 데이터 구조입니다.


스택에 push한 마지막 것이 가장 먼저 꺼내집니다.

스택의 맨 위에 요소만 삽입하거나 삭제할 수 있기 때문입니다.

현재 또는 "실행 중인" 실행 컨텍스트는 항상 스택의 맨 위에 있는 항목입니다.


실행 중인 실행 컨텍스트의 코드가 완전히 평가되면 최상위 항목이 pop된 다음 실행 항목이 실행 컨텍스트를 실행하는 것으로 간주됩니다.


또한 실행 컨텍스트가 실행되고 있다고 해서 다른 실행 컨텍스트를 실행하기 전에 실행이 완료되어야한다는 것을 의미하지는 않습니다.

실행 중인 실행 컨텍스트가 일시 중단되고 다른 실행 컨텍스트가 실행 중인 실행 컨텍스트가 되는 경우가 있습니다.


일시중단 된 실행 컨텍스트는 나중에 중단 된 부분을 선택합니다.

한 실행 컨텍스트가 이와 같이 다른 컨텍스트로 대체될 때마다 새 실행 컨텍스트가 만들어져 스택에 푸쉬되고 현재 실행 컨텍스트가 됩니다.











==================

2019.01.15 수정

'[ javascript ] > JavaScript' 카테고리의 다른 글

html 속성 바꾸기 setAttribute()  (0) 2019.01.14
DOM API에 접근하기  (0) 2018.12.30
자바스크립트의 메모리 관리  (0) 2018.10.17
이벤트객체  (0) 2018.04.22
키보드 누르는 이벤트  (0) 2018.04.21
Comments