[JavaScript] Scope
1. Scope란?
스코프(Scope)는 변수와 함수의 접근 가능한 범위를 말합니다. 즉, 스코프는 변수와 함수가 어디에서부터 어디까지 접근 가능한지를 결정하는 규칙입니다.
let func1 = function() {
let a = 1;
let b = 2;
return a + b;
}
let a = 20;
console.log(func1()); // 3
console.log(b); // Uncaught ReferenceError: b is not defined
스코프는 이름이 충돌하는 문제를 덜어주고, 자동으로 메모리를 관리합니다.
Scope의 종류
- 전역 스코프
- 함수 스코프
- 블록 스코프(es6)
전역 스코프
전역 스코프는 코드의 어느 곳에서든 접근 가능한 유효범위를 말합니다. 전역 스코프에서 선언된 변수와 함수는 모든 함수 내부에서 접근 가능합니다. 전역 스코프에서 선언된 변수와 함수는 일반적으로 애플리케이션 전역에서 사용되는 것으로, 전역 변수와 함수를 남발하면 코드의 가독성과 유지보수성이 떨어지는 문제가 발생할 수 있습니다. 또한, 타인과의 협업, 라이브러리 사용 시 충돌의 가능성이 있습니다.
함수 스코프
- 함수 내부에서 정의된 변수와 매개변수는 함수 외부에서 접근할 수 없습니다.
- 함수 내부에서 정의된 변수라면 함수의 어느 부분에서도 접근할 수 있습니다.
let func = function() {
let a = 1;
let b = 2;
let func2 = function() {
let b = 5;
let c = 6;
a = a + b + c;
console.log(a);
}
func2();
}
func(); // 12
function test() {
val = "hello";
var val2 = "world";
}
test();
console.log(val); // "hello"
console.log(val2); // Uncaught ReferenceError: val2 is no defined
블록 스코프
- 중괄호 안에서만 접근 가능합니다.
- 블록 내부에 정의된 변수는 블록의 실행이 끝나면 해제됩니다.
if(true) {
var value = "hello";
}
console.log(value); // "hello"
if(true) {
let value = "world";
}
console.log(value); // "hello"
댓글남기기