<script>
// 전역 변수 선언
var x = 100, y = 200, z = 300;
// 함수 선언
function num() {
//var 지역변수 선언
var x = "지역 변수"; //var = function level scope : 함수 내에서만 유효한 값. 바깥으로 빠져나오지 못함.
y = "전역 변수"; // var 키워드 생략시 전역 변수로 인식. 지역 변수 내부에서 선언 했지만 값이 바깥으로 빠져나옴.
//함수 내에서의 console.log
console.log(x); //지역변수
console.log(z); //300. 전역 변수는 모든 페이지에서 유효(전역 변수 선언값). 함수 내부에도 들어갈 수 있음
}
//함수 바깥에서의 console.log
console.log(x); //100(지역변수는 밖으로 나오지 못 해 전역변수 출력
console.log(y); //200
console.log(z); //300
num(); // 함수 호출. 함수 내에 있는 console.log만 출력
출력: 지역 변수 (var x)
300 (y 전역변수)
console.log(x); // 100 함수 내부에 있는 x는 적용되지 않음. 외부에 지역 선언 값을 가져옴(맨위에)
console.log(y); // 전역 변수. 함수 호출 이후이기 때문.
console.log(z); // 300
</script>
<script>
let b = 200; //전역변수
let c = 300;
{
let b = 300; //블록 내 선언
c = 100; //전역변수(let 키워드가 없기 때문)
console.log(`b: ${b}`); //b: 300. 블록 내 변수 재선언 때문
console.log(c); // 100 블록 내 변수 재할당 때문
}
console.log(`b: ${b}`); //200. 전역변수값. 블록 내 재선언 값은 밖에서 접근 불가.
console.log(`c: ${c}`); //500. {}내에서 var 키워드 없이 전역으로 값이 재할당 됐기 때문.
</script>
차이점
함수 레벨 스코프: 함수 안에서 선언하면 함수 밖을 제외한 내부 어디서든 접근이 가능
블록 레벨 스코프: 블록 안에서 선언하면 자신을 정의한 블록과 하위 블록에서만 접근이 가능
참고하기 좋은 글