자바스크립트 흐름을 이해하는데 유용하다. 즉 유효범위를 뜻한다. 자바의 지역 멤버, 전역 멤버 처럼.
- 전역 Scope : 전역 변수
- 지역 Scope : 지역 변수
지역 변수의 생존 범위 일반적으로는
- 블록 Scope : {} 범위 안에 선언된 변수는 안에서만 생존한다.
- 함수 Scope : 함수 안에 선언된 변수는 함수 안에서만 생존한다.
이 중 Block Scope 는 ES6에서 사용이 가능해졌다. < let , const 로 인한 변화
그럼 자바스크립트의 전역 Scope 는 무엇인가
- 어떤 것으로도 둘러싸여있지 않다.
- let ,const가 쓰이지 않은 블록스코프다.
2번이 참 신기한데, 이 이야기를 거꾸로 틀어보면 , JavaScript 는 Block Scope 를 지원하지 않았다는 것이다.
var num = 10;
console.log('전역 변수 ' + num);
function numTest(){
console.log('함수안에서 출력하는 변수 '+num);
}
numTest();
VM3013:3 전역 변수 10
VM3013:6 함수안에서 출력하는 변수 10
let const 를 제외하면 전부 다 전역스코프 취급된다.
{
var num = 10;
}
console.log('전역에서 출력 ' + num);
function numTest(){
console.log('함수에서 출력 ' +num);
}
numTest();
VM3353:5 전역에서 출력 10
VM3353:8 함수에서 출력 10
핵심은 전역 변수는 쓰지말라는 것이다. 쓰더라도 값이 변경되지 못하게 해야한다.
프로그램이 전역변수로 만들어져있다면, 어느 부분에서 에러가 났을 시에는?
전역 변수 하나 때문에 모든 것을 다 갈아 엎어 찾아야할지도모른다.
브라우저 디버거에서 Watch 항목에 값을 올려 디버깅할때라던지, 어...찌됬든 디버깅시에 Scope 탭이 분명히 있을 것이다. 꼭 확인하자.
'기반을 다지자 ES6' 카테고리의 다른 글
심화학습 : _proto_ ( prototype ) (0) | 2020.10.01 |
---|---|
This 에 대한 배경지식 , binding , 전역 객체 (0) | 2020.09.28 |
Function Object (0) | 2020.09.25 |
Constructor Function (0) | 2020.09.25 |
Function (0) | 2020.09.25 |