Scope & Closure

이건우·2021년 6월 5일
0
post-thumbnail

이번에는 Scope 와 Closer에 대해 포스팅 해보겠습니다 !

Scope란?

Scope를 우리말로 번역하면 ‘범위’라는 뜻을 가지고 있습니다. 즉, 스코프(Scope)란 ‘변수에 접근할 수 있는 범위’라고 할 수 있는데요.
자바스크립트에선 스코프는 2가지 타입이 있습니다. 바로 global(전역)과 local(지역) 입니다

Global scope란 ?

전역 스코프(Global Scope)는 말 그대로 전역에 선언되어있어 어느 곳에서든지 해당 변수에 접근할 수 있다는 의미이고 지역 스코프(Local Scope)는 해당 지역에서만 접근할 수 있어 지역을 벗어난 곳에선 접근할 수 없다는 의미입니다

local scope란?

자바스크립트에서 함수를 선언하면 함수를 선언할 때마다 새로운 스코프를 생성하게 됩니다. 그러므로 함수 몸체에 선언한 변수는 해당 함수 몸체 안에서만 접근할 수 있는데요. 이걸 함수 스코프(function-scoped)라고 합니다. 함수 스코프가 바로 지역 스코프의 예라고 할 수 있습니다.

let me = 1; // 전역 스코프
function itsme() { // 지역(함수) 스코프
 let me = 111;
 console.log(me);
}
itsme();
console.log(me);

itsme 함수에서 console.log(me);는 me를 출력하기 위해 자신의 함수 스코프 안에 변수 me가 있는지 찾아볼 것입니다. 그러면 let me = 111; 을 찾아내면 111을 console에 출력하고 함수는 자신의 사명을 다하게 됩니다.
만약 itsme 함수 안에 변수 me의 선언을 지운다면 console엔 어떤 값이 출력될까요?
함수 스코프 안에 me가 존재하지 않으니까 me가 선언되어있지 않다는 에러를 출력할까요? 한 번 itsme 함수를 다시 선언하고 실행해보겠습니다.

let me = 1; // 전역 스코프
function itsme() { // 함수 스코프
 console.log(me);
}
itsme(); // 1

결과는 예상과는 다르게 전역 스코프에 선언되어있는 me의 값인 1이 출력되는 것을 확인할 수 있습니다. 이는 Scope Chain에 의해 일어나는 현상인데요. 현재 자신의 scope에서 사용하고자 하는 변수가 없다면 Scope Chain을 통해 해당 변수를 찾게됩니다.

다음은 Closure에 대해 알아보겠습니다

Closure란?

closure는 외부함수의 변수에 접근 할 수 있는 내부함수 입니다
사전에는
“A closure is the combination of a function and the lexical environment within which that function was declared.”
클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical environment)과의 조합이다.
이렇게 적혀 있습니다

클로져의 예제와 예문은
https://opentutorials.org/course/743/6544
이곳에서 공부했습니다 이곳에서 참고 해서 보면 될 것 같습니다

profile
주니어 개발자 이건우 입니다 .

0개의 댓글