이름이 중복된 2개의 변수 중 어떤 변수를 참조해야 하는가? 자바스크립트는 어떻게 변수를 식별하는 것일까?
스코프는 참조 대상 식별자 (변수, 함수의 이름과 같이 다른 대상과 구분하여 식별할 수 있는 유일한 이름)를 찾아내기 위한 규칙이다
✔ 선언과 키워드 let, const,var
전역 스코프(Global scope)
: 바깥 스코프 라고하며 어디에서든 참조 할수있다.
지역 스코프(Local scope)
: 안쪽 스코프 라고하며 블록 안, 함수 내에서만 참조 할수있다.
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
전역 변수(Global variable)
: 바깥쪽 전역에서 선언된 변수 어디든 참조 가능하다.
지역 변수(Local variable)
: 안쪽 지역내에 선언된 변수 안에서만 참조 가능하다.
🔹 자바스크립트의 스코프는 변수에 접근할 수 있는 유효범위이다.
🔹 바깥쪽 스코프에서 선언한 변수는 안쪽에서 사용가능하다
🔹 안쪽 스코프에서 선언한 변수는 바깥쪽에서 사용불가다.
🔹 스코프는 중첩이 가능하다.
🔹 가장 바깥은 전역스코프라 하고 나머지는 지역스코프다
🔹 지역 변수가 전역변수보다 우선순위가 더 높다.
🔹 중괄호를 기준으로 범위가 구분된다
🔹 function 을 제외한 if나 for 등의 '{ }' 안에 있는 범위를 블록 스코프
🔹 function{ } <- 안에있는 범위를 함수 스코프
🔹 var은 블록스코프를 무시한다.
변수 | 재할당 | 재선언 | 유효범위 |
---|---|---|---|
let | 가능 | 불가 | 블록 스코프 및 함수 스코프 |
const | 불가 | 불가 | 블록 스코프 및 함수 스코프 |
var | 가능 | 불가 | 함수스코프 |
let const 와 var의 차이점중 큰것은 유효범위
if(true){
let userName = 'Kimcoding'
console.log(userName); //'Kimcoding'
}
console.log(userName); //ReferenceError: userName is not defined
위 예제에서 전역에 선언된 변수 x는 어디에든 참조할 수 있다. 하지만 함수 foo 내에서 선언된 변수 x는 함수 foo 내부에서만 참조할 수 있고 함수 외부에서는 참조할 수 없다. 이러한 규칙을 스코프라고 한다.
✔ 블록안에서 선언한 변수는 오직 블록안에서만 접근이 가능하다.
함수의 상위 스코프를 결정하는 방식으로,
함수를 어디서 선언하였는지에 따라 상위 스코프를 결정하는 것이다.
자바스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프를 따른다.