반응형
📝렉시컬 환경 (Lexcial), 클로저 (Closure)
let globalVar = '전역';
/** Lexical 환경 테스트 **/
function fn1() {
let fn1Var = 'fn1'
function fn2(){
let fn2Var = 'fn2'
console.log(globalVar, fn1Var, fn2Var);
}
fn2();
}
/** Lexical 환경이 아니라면? **/
function fn4(){
let fn4Var = 'fn2'
console.log(globalVar, fn3Var, fn4Var);
}
function fn3() {
let fn3Var = 'fn1'
fn4();
}
fn1(); // 전역 fn1 fn2 [Lexical]
//fn3(); // Error (fn1Var is not defined) [Not Lexical]
자바스크립트의 함수는 어디에서 실행했냐가 아닌 어디에서 정의했냐가 중요하다 자바스크립트는 이러한 방식을 채택하는데 이러한 방식 렉시컬 스코프라고한다
이러한 걸 도대체 어디서 쓸 수 있을까?
const myFunc = () => {
let x = 10; // 접근 불가능 (은닉화)
// 클로저
const plusTen = (y) => {
x = x + y;
console.log(x);
}
return plusTen;
}
const addFunc = myFunc();
addFunc(5); // 15
addFunc(10); // 25
이러한 방식으로 사용이 가능한데 x라는 변수에는 직접 접근을 못하지만 실제로 사용은 하고 있다 이러한 걸 클로저라고 한다 자세히 이야기하자면 반환된 내부함수가 자신이 선언됐을 때의 환경(렉시컬 스코프)인 스코프를 기억하여 스코프 밖에서 호출되어도 그 환경에 접근할 수 있는 함수이다
🔗 참고 및 출처
반응형