javascript- 스코프

현우.·2024년 6월 20일

JavaScript

목록 보기
23/31
post-thumbnail

스코프

스코프는 식별자(변수,함수의 이름)가 유효한 범위를 나타낸다.

선언된 위치에 따라 유효범위가 결정된다.
스코프를 사용하면 이름충돌을 막을 수 있고 메모리를 절약할 수 있다.

스코프의 구분

전역 스코프

코드 전체의 범위로 코드 어디에서든지 참조 가능, 전역 변수의 범위

지역 스코프

코드 블록{}내의 범위로 코드 블록 내에서만 참조가능, 지역변수의 범위
오늘날 js의 변수(let,const)는 블록 레벨 스코프를 따른다.

코드 블록{}에는 일반적인 {}, 조건문() {}, 반복문() {}, function() {} 등이 있다.

코드 📄

let x ='global'; // 전역 스코프

{  // 지역 스코프(블록 레벨 스코프)
    let x=  'local'; 
    console.log(x); // local 
}
 console.log(x); // global
  • 전역 스코프에 있는 변수는 전역변수
  • 지역 스코프에 있는 변수는 지역변수
  • 함수의 매개변수도 지역변수

중첩된 블록

코드 📄

{
    const x= 10;
    {
        const  y= 20;
        console.log(x); // 10
    }
    console.log(x); // 10
    console.log(y); // ReferenceError: y is not defined
}

해설

  • 제일 안쪽 블록은 x가 정의되어있지 않기 때문에 바깥 블록으로 찾아가 x의 값을 찾는다.
  • y는 자신이 속한 블록에 y가 정의되어 있지 않기때문에 바깥으로 찾아가지만 밖에도 없기 때문에 에러가 발생한다.

결론
외부 블록에서는 내부 블록에 있는 변수를 참조 할 수 없고 오직 내부에서만 외부블록의 변수를 참조 할 수 있다.

렉시컬 환경

각각의 코드 블록은 렉시컬 환경이라는 내부 객체를 가지고 있다.

렉시컬 환경 특징

  • 렉시컬 환경은 환경레코드, 외부환경참조로 이루어져 있다.
  • 환경 레코드는 현재 블록의 정보를 가진다.
  • 외부환경참조는 현재 블록의 부모를 참조한다.
const a=1;
{
    const a=2;
    {
        console.log(a); //2
    }
}

해설
자신의 블록에서 a라는 값이 없기 때문에 자신이 참조하고 있는 부모 블록에 가서 a라는 값을 확인하고 있으면 가져온다.

이것이 가능한 이유는 실행 컨텍스트가 코드의 실행 순서와 스코프를 기억하고 있고
각각의 코드블록안에는 렉시컬 환경을 가지고 있기 때문이다.

profile
학습 기록.

0개의 댓글