[javascript] 클로저
2020-07-17
클로저의 이해를 위해선 정적 유효범위에 대한 이해가 필수적이다.
정적 유효범위는 함수를 ‘선언’할 시 생기는 어휘적 범위이다. 함수를 선언한 시점에서 내부에 변수가 존재할 때, 먼저 그 함수 내부에서 참조할 수 있는 지역변수가 존재하는지 판단한 후 존재한다면 함수 내부의 지역변수를 참조하고 존재하지않을 시에는 외부 함수의 지역변수, 혹은 전역변수가 있는지를 참조한다.
var name = "zero";
function log() {
console.log(name);
}
function wrapper(){
var name = 'nero';
log();
}
wrapper(); // zero로 출력됌
log 함수가 한 번 선언된 이상, name 변수는 전역변수를 가리키게 되어있다. 전역변수를 다른 값으로 바꿔야지 log 함수의 값이 바뀌게 된다. 이런 이유로 전역변수가 바뀌면 함수의 값도 바뀌고, 규모가 큰 프로젝트에서 덮어씌워지거나 하는 불상사가 없어야하기 때문에 전역변수를 만드는 것은 지양해야한다.
ㅡㅡㅡㅡ 다음날 이어서 하기..
closure MDN에 나온 closure 개념