Closure(클로저)
💡 드디어 클로저입니다! 외부함수에 접근할 수 있는 내부함수, 그러나 내부함수에 외부함수가 접근할 수 없다는 클로저으이 개념에 대해서 정리해보겠습니다.
Closure(클로저)
외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않습니다.
예를 들어 한 함수안에 다른 함수가 있다면 그 안의 함수는 바깥에 정의해놓은 변수를 사용할 수 있지만 그 반대는 가능하지 않습니다.
function duckWorld() {
var name = "미더덕";
function who() {
console.log(name);
}
return who;
}
var duck = duckWorld(); // duckWorld 변수에 who를 return 합니다.
// 유효범위의 어휘적 환경을 유지
duck(); // return된 who 함수를 실행합니다. (name 변수에 접근)
자바스크립트에서는 함수를 리턴할 때, 클로저를 형성하기 때문에 클로저가 형성될 당시의 함수와 함수가 선언된 어휘적 환경의 조합(쉽게 말해 당시의 관계되는 코드들)의 참조를 유지(기억)합니다.
따라서 duck 함수를 호출하면 name 변수는 클로저에 의해 기억되고 있기 때문에 “미더덕”가 console.log에 전달되게 됩니다.
결론
Closure(클로저)란, 단순하게 외부함수에 접근할 수 있는 내부함수가 아니라, 함수가 선언되는 순간에 함수가 실행될때 실제 외부변수에 접근하기 위한 객체입니다.
Clouser(클로저)를 남발하게되면 오버플로우가 생길 수도 있기 때문에 위험하므로 정확하게 알고 사용합시다!!
참고
https://velog.io/@josworks27/TIL-%ED%81%B4%EB%A1%9C%EC%A0%80