코드스테이츠 13일차

SEB_Full_30_주진성·2021년 5월 30일
0


스코프(Scope)란

우리말로 번역하면 ‘범위’라는 뜻을 가지고 있다.
즉, 스코프(Scope)란 ‘변수에 접근할 수 있는 범위’라고 할 수 있다.


스코프(Scope)의 타입

  • global(전역)
    전역(Global Scope) 에서 선언된 변수이며 어디에든 참조할 수 있다.
  • local(지역)
    지역 스코프(Local Scope)는 지역(함수) 내에서 선언된 변수이며 그 지역과 그 지역의 하부 지역에서만 참조할 수 있다
var global = 'global';

function foo() {
  var local = 'local';
  console.log(global);
  console.log(local);
}
foo();

console.log(global);
console.log(local); // Uncaught ReferenceError: local is not defined

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

블록 레벨 스코프란 코드 블록({…})내에서 유효한 스코프를 의미한다. 여기서 “유효하다”라는 것은 “참조(접근)할 수 있다”라는 뜻이다.

var x = 0;
{
  var x = 1;
  console.log(x); // 1
}
console.log(x);   // 1

let y = 0;
{
  let y = 1;
  console.log(y); // 1
}
console.log(y);   // 0

  return 0;
}

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

if (true) {
  var x = 5;
}
console.log(x);

변수 x는 코드 블록 내에서 선언되었다. 하지만 자바스크립트는 블록 레벨 스코프를 사용하지 않으므로 함수 밖에서 선언된 변수는 코드 블록 내에서 선언되었다할지라도 모두 전역 스코프을 갖게된다. 따라서 변수 x는 전역 변수이다.

함수 레벨 스코프(Function-level scope)

var a = 10;     // 전역변수

(function () {
  var b = 20;   // 지역변수
})();

console.log(a); // 10
console.log(b); // "b" is not defined

자바스크립트는 함수 레벨 스코프를 사용한다. 즉, 함수 내에서 선언된 매개변수와 변수는 함수 외부에서는 유효하지 않다. 따라서 변수 b는 지역 변수이다.


동적 스코프(Dynamic scope)

  • 함수를 어디서 호출하였는지에 따라 상위 스코프를 결정한다.

정적 스코프(Lexical scope)

  • 함수를 어디서 호출하는지가 아닌, ⭐️어디에⭐️ 선언하였는지에 따라 결정된다.
  • 자바스크립트를 비롯한 대부분의 언어는 렉시컬 스코프를 따른다.
  • 함수를 선언한 시점에 상위 스코프가 결정된다.
    참조 링크

0개의 댓글