출처: 한 입 크기로 잘라먹는 리액트
// 스코프
// 우리말로 "범위" 를 뜻함
// 변수나 함수에 접근하거나 호출할 수 있는 범위를 말 함
function funcA() {
let a = 1;
}
console.log(a); // Uncaught ReferenceError: a is not defined
// 변수 a는 함수내에서만 선언이 돼 있는 상태이기 때문에, 함수 바깥에서
// 호출할 수 없다. funcA에 선언된 지역 스코프임
// 스코프는 전역(전체) 스코프와 지역(특정 영역) 스코프로 나뉜다.
let a = 1; // 전역 스코프
function funcB() {
console.log(a);
let b = 1; // 지역 스코프
function funcD() {
}
}
funcD(); // 불가능
funcB(); // 가능
console.log(b); // 불가능
if(true) {
let c = 1; // 지역 스코프
function funcD() {
}
}
funcD(); // 가능
console.log(c); // 불가능
// 블록내에 선언된 모든 변수는 지역 스코프를 갖는다.
for (let i = 0; i < 10; i++) {
let d = 1; // 지역 스코프
function funcD() {
}
}
funcD(); // 가능
console.log(d); // 불가능
console.log(i); // 불가능
// 함수 선언식만 for문과 if문에서 지역스코프를 갖지 않는다. 함수 내에서는 지역스코프다.
// 따라서 함수 선언식은 함수내에서만 지역 스코프를 갖는다.