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