Scope

 - 내가 사용하려는 Variable(변수)가 존재하는가?

 - Scope를 이해하기전에, let/const vs var 를 이해해보자.

 

var

 - ES6(ECMASCript 6) 이전에 사용했던 선언 방식

 - Function Scope 방식

 

let / const

 - ES6(ECMASCript 6) 때 추가 된 선언 방식

 - Block Scope

 

var vs let / const

1. 두번 정의

 

1
2
3
4
5
var varTest = "test";
var varTest = "test1";
 
let letTest = "test";
let letTest = "test1";
cs

 

var 와 let 을 동일한 변수명으로 두번 정의한 후, 변수의 값을 변경할때

var는 문제가 없지만 let은 이미 선언되어있는 변수라 하고 에러가 발생한다.

 

 

2. 나중에 정의

1
console.log(varTest);
cs

변수가 정의되지 않았을때 변수를 사용한다면, 아래와 같이 정의되어 있지 않다고 에러가 발생한다.

 

 

하지만!! 아래 다시 해당 변수를 선언한다면, 1번라인에서는 undefinded가 찍히고 에러가 발생하지 않는다.

 

1
2
3
console.log(varTest);
 
var varTest = "test";
cs

만약에 var를 let / const 로 변경한다면 let 변수가 정의되어 있지 않다고 에러가 발생할 것이다.

 

1
2
3
console.log(letTest);
 
let letTest = "test";
cs

 

 

3. Function Scope

var 의 경우에는 Function-Scope 입니다. var로 선언된 변수의 유효 범위가 함수 단위라는 것을 의미 합니다.

 

1
2
3
4
5
6
7
8
9
var varTest = "test";
console.log(varTest);     // test 출력
 
if (true){
    var varTest = "test1";
    console.log(varTest);    //test1 출력
}
 
console.log(varTest);     // test1 출력
cs
 
1번라인에서 선언한 varTest 변수는 5번에서 다시 선언되어 지는데, 이 변수는 동일한 변수로 인지하게 됩니다.

그래서 6번라인과 9번라인에서 test1값이 출력됩니다.

 

4. Block Scope

let / const 의 경우에는 Block-Scope 라고 합니다. 유효 범위가 블록 { } 으로 감싸지는 부분이 유효 범위 입니다.

 
1
2
3
4
5
6
7
8
9
let letTest = "test";
console.log(letTest);     // test 출력
 
if (true){
    let letTest = "test1";
    console.log(letTest);    //test1 출력
}
 
console.log(letTest);     // test1 출력
cs
기본적으로 let / const를 사용하면, 기존에 사용하였던 언어들 처럼
동일한 변수명으로 되어있는 전역/지역 둘다 존재한다면, 전역/지역 변수는 다른 변수로 인지합니다.

그래서 4~7번 라인에 존재하는 letTest와 1번라인에 선언한 letTest는 다른 변수입니다.

 

 

결론

var 보다는 let/const를 사용하여, 더 좋은 개발자가 되자!
 
노마드 코더 유튜브 참고했습니다!

 

'개발 > Javascript Concept 33개' 카테고리의 다른 글

8. IIFE  (0) 2019.05.21
7. Expression vs Statement  (0) 2019.05.02
1. Call Stack  (0) 2019.04.18

+ Recent posts