- 📌 scope란?
- 📌 var
- 📌 let/const
- 📌 참조
스코프란 유효한 참조 범위를 의미한다. 선언된 위치에 따라 참조할 수 있는 범위가 달라지는 것이다.
var은 함수 레벨 스코프이다.(fuction-level scope)
함수 레벨 스코프란 함수 레벨에서 선언된 변수만 지역변수로 한정하고 나머지는 모두 전역변수로 간주하는 것이다.
즉, abc는 지역변수로 함수 내부에서만 참조가 가능하여 아래와 같이 함수 밖에서 참조를 시도하는 경우, 에러가 발생하는 것이다.
const varFunc = function(){
var abc = "함수레벨스코프";
}
varFunc(); // "함수레벨스코프"
console.log(abc) // ReferenceError: abc is not defined
반면에, 함수 밖에서는 var로 선언한 변수는 전역변수로 취급되기 때문에 어디서든 참조를 할 수 있다.
추가적으로 자바스크립트에서는 (if, while, try/catch)와 같은 블록에서는 내부에서 var로 선언된 변수라면 참조를 할 수 있다.
if(a<b){
var abc = "참조가능";
}
console.log(abc) //"참조가능"
앞서 살펴봤던 var과는 다르게 let과 const는 블록 레벨 스코프이다.(block-level-scope)
if(a<b){ let abc = "abc"; const def = "def"; } console.log(abc) // "abc" console.log(def) // "def"
let,const는 함수 내부뿐만 아니라 if문과 for문과 같은 블록에서 선언된 변수도 지역변수로 취급한다.
const letConstFunc = function(){ let abc = "abc"; const def = "def"; } console.log(abc) // ReferenceError: coco is not defined console.log(def) // ReferenceError: coco is not defined