스코프는 전역스코프(Global Scope)와 지역스코프(Local Scope)가 있습니다.
전역 스코프는 블록{} 바깥이나 함수 바깥에 선언 된 변수 입니다.
전역 코스프에 변수를 선언하면 어떤위치의 코드에서든 사용할 수 있는 변수가 됩니다.
이것을 전역변수 라고 합니다.
<script>
var globalScope = "global"; // 전역스코프 (전역변수)
function isGlobal() {
return `${globalScope} 입니다.`;
}
console.log(isGlobal()); // global 입니다.
</script>
전역변수를 함수내에서 사용가능하듯 어떤 곳에서든지 사용 가능합니다.
지역 스코프는 코드의 특정 부분에서만 사용할 수 있는 변수 입니다.
이것을 지역변수 라고 합니다.
지역 스코프는 함수 스코프와 블록 스코프 두 가지로 나뉩니다.
함수 스코프는 말 그대로 함수 내부에서 선언 된 변수 입니다.
함수내부에서만 접근할 수 있습니다. (var, let, const 동일)
<script>
function isLocal() {
var localScope = "local" //함수스코프 (지역변수)
return `${localScope} 입니다.`
}
console.log(isLocal()); // local 입니다.
console.log(localScope); //Uncaught ReferenceError: local is not defined
</script>
위와 같이 함수 내에 선언된 변수 localScope를 함수 바깥에서 콘솔창으로 접근해보았지만 에러가 뜹니다.
블록 스코프 또한 말그대로 블록{}, if문 , for문 블록 내부에서 선언 된 변수 입니다.
블록 내부에서만 접근 가능 합니다.
(단, 블록 내부에서 선언 한 변수는 블록 내부에서만 사용 가능 한게 정상이지만, var은 내부에서도 선언 해도 바깥에서 접근 사용이 가능합니다.)
<script>
if(true) {
let blockScope = "블록 스코프 입니다.";
}
console.log(blockScope); // Uncaught ReferenceError: blockScope is not define
</script>
if문의 블록 내부에서 선언 한 변수이기때문에
접근하지 못해 에러가 뜨게 됩니다.
제외인 var로 했을 경우
<script>
{
var age = 28;
}
console.log(age); // 28
</script>
블록 내부에서 선언된 변수 age가
이상하게도 바깥에서도 접근이 된 모습입니다.
var은 블록 스코프가 아니다 라느 의미 입니다.
let ,const는 블록 스코프 입니다.
처음에는 var, let, const 다 같은 변수 선언 방식인데 그 차이점을 몰랐지만
공부해서 알아보았습니다! 이제는 어느정도 이해를 하고 사용할 수 있겠다 싶습니다.