변수 참조의 유효 범위
global scope
let x = 0; let y = 1; const scopeTest = function () { let z = 2; console.log(x); console.log(y); }; console.log(x); console.log(y);전체를 전역 스코프 라고함.
x,y 변수는 전역 스코프 에서 생성이 되었기에
scopeTest 내부에서 호출하여도 동작함
local scope
let x = 0; let y = 1; const scopeTest = function () { let z = 2; console.log(x); console.log(y); }; console.log(z);위 내용중 scopeTest 내부가 지역 스코프
전역에서 생성된것은 지역에서 참조가 가능하지만
지역에서 생성된것은 전역에서 참조가 불가능함.
마지막에 있는 console.log(z); 는 에러발생.함수 레벨 스코프
const sum = function () { var x = 0; } console.log(x);함수 내부에 선언된 스코프
해당 함수 밖에서 출력하려고하면 undefined 에러가 뜸.
블록 레벨 스코프
if () { var y = 0; } console.log(y);if문, for 반복문 등은 블록레벨 스코프를 따름
const나 let으로 생성시에는 외부에서 호출이 불가능 하지만
var로 선언된 변수는 블록 레벨 스코프를 따르지 않아서 외부에서 호출시 정상적으로 출력이 가능함.
이처럼 var는 제대로된 스코프를 따르지 않기에 사용을 지양하는게 좋음.
이런 경우 외부에서 사용하던 i의 값이 덮어씌워져 버리는 상황이 생길 수 있음.