함수 유효범위와 클로저
기본적으로 자바스크립트는 함수에 대한 유효범위 만 제공
.
자바스크립트의 함수의 바디는 전역 유효 범위랑은 다른 지역 유효 범위
상에서 실행됨.
어휘적 유효범위
함수는 동적이라기 보단 어휘적으로 유효 범위가 정해진다.
유효 범위 : 접근할 수 있는 범위를 의미
함수가 실행되는 유효범위가 아니라 정의되어있는 유효범위 안에서 실행됨.
정의될 때, 현재의 유효 범위 체인이 저장된다. 함수 내부 상태 중 일부가 됨.
함수 하나를 선언하면 함수에서 접근할 수 있는 유효범위는 함수를 포함한 객체의 모든 프로퍼티들(전역객체)이다.
함수 내에 중첩된 함수의 경우 이를 포함한 함수, 상위 객체들이 접근할 수 있는 유효범위가 된다.
유효범위체인이 고정되어도 유효 범위 체인 안에 정의된 프로퍼티는 변경될 수 있다.
호출되는 시점에 연결된 모든 것들에 접근할 수 있다.
호출객체
this
arguments 프로퍼티로 초기화 된다.
네임스페이스로서의 호출 객체
클로저로서의 중첩된 함수
중첩된 함수를 허용, 함수를 데이터로 사용할 수 있으며 어휘적 유효 범위를 사용한다는 사실. -> 강력한 결과
var a = xx;
..
function f() {
function g() {
...
}
g();
}
f();
f()
호출 시 유효 범위 체인 : f() 호출객체 - 전역객체g()
호출 시 유효 범위 체인 : g() 호출객체 - f() 호출객체 - 전역객체
클로저 예시
함수 호출의 경계를 넘어 값을 기억할 수 있는 함수가 필요할 때,
사라지지 않으면서도 private 속성을 지니는 변수를 생성할 수 있다.
Function() 생성자
var f = new Function("x", "y", "return x*y;");
==
function f(x, y) {return x*y;}
익명함수를 생성.
- 생성자를 사용하면 코드를 동적으로 생성하고 컴파일할 수 있다.
eval()
과 유사 - 호출될 때마다 파싱하고 새로운 함수 객체를 생성함.
- 어휘적 유효범위를 사용하지 않는다.
최상위 레벨의 함수
인 것처럼 컴파일된다.
'Programming > Javascript' 카테고리의 다른 글
자바스크립트(Javascript) 디자인패턴 - 싱글톤패턴(Singleton Pattern) (0) | 2020.05.29 |
---|---|
자바스크립트(Javascript) 함수의 기본 패턴들 (콜백, 메모이제이션, 커리) (0) | 2020.05.29 |
자바스크립트(Javascript) 클래스, 생성자, 프로토타입에 대하여 (0) | 2020.05.29 |
자바스크립트(Javascript) 객체와 배열 (0) | 2020.01.08 |
Javascript 함수(function)에 대하여 (0) | 2020.01.08 |
댓글