이번에는 자바스크립트의 Scope 에 대해서 알아봅시다. Scope 란, 우리가 변수 혹은 함수를 선언하게 될 때 해당 변수 또는 함수가 유효한 범위를 의미합니다. Scope 는 총 3가지 종류가있습니다.
Global (전역) Scope : 코드의 모든 범위에서 사용이 가능합니다.
Function (함수) Scope : 함수 안에서만 사용이 가능합니다.
Block (블록) Scope : if, for, switch 등 특정 블록 내부에서만 사용이 가능합니다.
Scope 이해
예시를 통한 Scope 이해
한번, 예시 코드를 보고 Scope 를 이해해봅시다.
Copy const value = 'hello!' ; // Global Scope
function myFunction () {
console .log ( 'myFunction ' );
console .log (value);
}
function otherFunction () {
console .log ( 'otherFunction ' );
const value = 'bye!' ; // Function Scope
console .log (value);
}
myFunction ();
otherFunction ();
console .log ( 'global scope ' );
console .log (value);
위 코드의 결과는 다음과 같습니다.
Copy // 결과)
myFunction
hello !
otherFunction
bye !
global scope
hello
또 다른 예시를 확인해봅시다.
Copy const value = 'hello!' ; // Global Scope
function myFunction () {
const value = 'bye!' ; // Function Scope
const anotherValue = 'world' ; // Function Scope
function functionInside () {
console .log ( 'functionInside ' );
console .log (value);
console .log (anotherValue);
}
functionInside ();
}
myFunction ()
console .log ( 'global scope ' );
console .log (value);
console .log (anotherValue);
위 코드의 결과는 다음과 같습니다.
Copy // 결과)
functionInside
bye !
world
global scope
hello !
ReferenceError : anotherValue is not defined
이제, 또 다른 예시를 알아봅시다.
Copy const value = 'hello!' ; // Global Scope
function myFunction () {
const value = 'bye!' ; // Function Scope
if ( true ) {
const value = 'world' ; // block scope
console .log ( 'block scope: ' );
console .log (value);
}
console .log ( 'function scope: ' );
console .log (value);
}
myFunction ();
console .log ( 'global scope: ' );
console .log (value);
위 코드의 결과는 다음과 같습니다.
Copy // 결과)
block scope :
world
function scope :
bye !
global scope :
hello !
const
로 선언한 값은 Block Scope 로 선언이 됩니다. 따라서, if 문 같은 블록 내에서 새로운 변수/상수를 선언하게 된다면, 해당 블록 내부에서만 사용이 가능하며, 블록 밖의 범위에서 똑같은 이름을 가진 값이 있다고 해도 영향을 주지 않습니다.
let
또한 마찬가지 입니다.
하지만 var
는 어떨까요?
var 변수인 경우
var
는 Function Scope 로 선언이 되므로, if 문 블록 내부에서 선언한 value 값이 블록 밖의 value 에도 영향을 미치게 됩니다.
Copy var value = 'hello!' ;
function myFunction () {
var value = 'bye!' ;
if ( true ) {
var value = 'world' ;
console .log ( 'block scope: ' );
console .log (value);
}
console .log ( 'function scope: ' );
console .log (value);
}
myFunction ();
console .log ( 'global scope: ' );
console .log (value);
위 코드의 결과는 다음과 같습니다.
Copy // 결과)
block scope :
world
function scope :
world
global scope :
hello !