스코프란 식별자에 접근할 수 있는 유효 범위 를 뜻한다.
접근할 수 있는 범위
가 존재한다.중괄호(블록)
또는 함수
에 의해 나눠진다.스코프
라고 한다.변수 3개의 스코프 유효 범위
에 대해 알아보면서 블록 스코프와 함수 스코프의 차이점
에 대해 알아보겠다.
for(let i=0; i<10; i++) {
console.log(i);
}
// 전역스코프에서 선언한 변수 i 는 존재하지 않음으로 아래에서 ReferenceErrer을 일으킨다.
console.log(i);
// ReferenceErrer
블록 스코프 안에서 let과 const
키워드로 선언한 변수는 스코프 안에서만 참조
가 가능하다.
for(var i=0; i<10; i++) {
console.log(i);
}
// 지역 스코프에서 선언되었지만 모든 스코프에서 접근 가능하다.
console.log(i);
// 9
그런데 var 키워드로 선언한 변수는 블록 스코프를 무시
하고 스코프 울타리 밖에서도 접근 가능하다.
var 키워드로 선언한 변수는 함수 스코프만
을 따른다.
블록 단위로 스코프를 구분했을 때, 훨씬 더 예측 가능한 코드를 작성할 수 있으므로 재할당이 필요하다면 var보단 let 키워드의 사용이 권장된다.
window
객체란 브라우저에만 존재하는 객체이다.전역 영역
을 담고 있기도 하다.함수 선언식
으로 함수를 선언하거나, var 키워드
로 변수를 선언하면 window 객체에 속해진다
.var a = 'a';
> undefined
let b = 'b';
> undefined
window.a;
"a"
window.b;
undefined
function myFn(){
return 'myFn';
}
> undefined
window.myFn();
> "myFn"
전역 변수는 최소화하자.
가장 바깥 스코프에 정의한 변수는 전역 변수이다. 즉 어디서든 접근이 가능하다.
이러한 전역 변수를 var로 선언하는 경우 문제가 될 수 있다.
전역 변수를 최소화 하면 side effect(의도하지 않은 로직에 의한 문제 발생)를 줄일 수 있다.
선언 없는 변수 할당 금지
선언 없이 변수를 할당하면 해당 변수는 var로 선언한 전역 변수처럼
취급된다.
실수를 방지하기 위해 Strict Mode를 사용할 수 있다.