🌟 각 상수나 변수 등의 요소들이 허용된 영역, 범위
- 변수의 접근성을 관리하는 개념이며, 전역 (global) 과 지역 (local), 2개의 범위가 존재한다
let name = "hyelin"; function print(){ console.log(name); // hyelin } print(); console.log(name); // hyelin
- name 이라는 전역 변수를 선언
- print 함수 블록 안에서 출력한 값과 블록 바깥에서 출력한 값이 동일하게 나온다
👉🏻 전역 스코프로 선언된 변수는 모든 범위에서 사용 가능하다
const color = 'blue' const returnColor = () => { const color = 'red' return color; }; console.log(returnColor()); // red
- 전역 변수가 따로 있지만, 가장 가까운 변수를 따르기 때문에 함수 내부에 있는 선언 값을 출력
- 만약 함수 내에 변수가 없으면, 전역에서 변수를 찾는다
- 따라서 되도록이면 전역 변수를 지양하고 지역 변수를 사용하는 것이 좋다
👉🏻 전역 변수는 어디서나 접근이 가능하고, 수정할 수 있기 때문에
const MYAPP = {};
MYAPP.student = {
name: 'Lee',
gender: 'male'
};
console.log(MYAPP.student.gender);
if (true) {
var num = '12345';
}
num; // '12345'
- 실행 컨텍스트 (context) : 코드가 실행되기 위한 환경. 함수가 호출 될 때마다 생성된다
function newNum () {
var num = '12345';
}
num; // error
let
, const
로 선언된 변수가 블록 스코프 방식을 따른다.
function myName () {
// "if" block scope
let name = "hyelin";
console.log(name); // "hyelin"
}
// console.log(name)
if (true){
// "if" block scope
const name = "hyelin";
console.log(name); // "true"
}
console.log(name); // ReferenceError: message is not defined
const variable = 'world';
function A(){
const variable = 'test';
B();
}
function B(){
console.log(variable);
}
A();
//output = 'world'
📌 단, 상위 스코프에서 하위 스코프에 선언된 변수로는 접근할 수 없다
- 실행문의 위치를 기준으로 하위 스코프부터 시작하여 원하는 값을 찾을 때까지 상위 스코프를 타고 올라가며 탐색해나가는 것이 Scope Chain의 가장 기본적인 작동방식