자바스크립트 - 스코프

정진우·2022년 5월 20일
0

TIL

목록 보기
50/54
post-thumbnail

스코프란?

  • 참조 대상 식별자를 찾아내기 위한 규칙


    *참조 대상 식별자 : 변수, 함수의 이름과 같이 어떤 대상을 다른
    대상과 구분하여 식별할 수 있는 유일한 이름
var x = 'global';

function foo () {
  var x = 'function scope';
  console.log(x);
}

foo(); // function scope
console.log(x); // global

스코프의 구분

  • 전역 스코프(Global scope)
    : 코드 어디에서든지 참조 가능

  • 지역 스코프(Local scope or Function-level scope)
    : 함수 코드 블록이 만든 스코프로 함수 자신과 하위 함수에서만 참조 가능

변수의 관점에서 스코프의 구분

  • 전역 변수(Global variable)
    : 전역에서 선언된 변수이며 어디에든 참조 가능

  • 지역 변수(Local variable)
    : 지역(함수) 내에서 선언된 변수이며 그 지역과
    그 지역의 하부 지역에서만 참조 가능

변수는 선언 위치에 의해 스코프를 가짐
전역에서 선언된 변수는 전역 스코프를 갖는 전역 변수이고,
지역에서 선언된 변수는 지역 스코프를 갖는 지역 변수가 됨


전역 스코프를 갖는 전역 변수는 전역에서 참조 가능
지역에서 선언된 지역 변수는 그 지역과 그 지역의
하부 지역에서만 참조 가능



자바스크립트 스코프의 특징

  • 함수 레벨 스코프(function-level scrop)
    : 함수 블록 내에서 선언된 변수는 함수 코드 블록 내에서만
    유효하고 함수 외부에서는 유효하지 않다.

  • ES6에서 도입된 let 키워드를 사용하면 블록 레벨 스코프 사용 가능
var x = 0;
{
  var x = 1;
  console.log(x); // 1
}
console.log(x);   // 1

let y = 2;
{
  let y = 3;
  console.log(y); // 3
}
console.log(y);   // 2



전역 스코프(Global scope)

  • 전역에 변수를 선언하면 어디서든지 참조할 수 있는 전역 스코프를 갖는
    전역 변수가 됨
  • var 키워드로 선언한 전역 변수는 전역 객체(Global Object)
    window의 프로퍼티이다.
  • 전역 변수의 사용은 변수 이름이 중복될 수 있고, 의도치 않은 재할당에
    의한 상태 변화로 코드를 예측하기 어렵게 만드므로 사용을 억제해야 함



비 블록 레벨 스코프(Non block-level-scope)

if (true) {
  var x = 1;
}
console.log(x); // 1
  • 함수 밖에서 선언된 변수는 코드 블록 내에서 선언되었다할지라도
    모두 전역 스코프를 갖게됨



Reference

poiemaweb

profile
프론트엔드 개발자를 꿈꾸는

0개의 댓글