본문 바로가기
Programming/JavaScript

[JavaScript] Scope

by inyeong 2024. 9. 25.

1. Scope

Scope는 변수가 사용될 수 있는 범위를 정의한다.

어떤 변수는 프로그램 전체에서 접근할 수 있는 반면, 다른 변수는 특정 부분에서만 접근할 수 있다.

 

2. Block 

block은 { } 내부의 코드이다.

block은 여러 개의 문장을 그룹화하고 코드의 구조를 구분할 수 있게 한다.

 

ex) 함수의 body, if문 등에서 block을 찾을 수 있다.

const logSkyColor = () => {
// block
  let color = 'blue'; 
  console.log(color); // blue 
// block
}

if (dusk) {
// block
  let color = 'pink';
  console.log(color); // pink
// block
}

 

3. Global Scope (전역 스코프) 

global scope (전역 스코프)에서는 변수가 블록 밖에 선언된다.

이러한 변수들을 global variables (전역 변수)라 한다.

특정 블록 안에 있지 않기 때문에 프로그램 내 어느 코드에서나 접근 가능하다.

const color = 'blue'; // global scope 

const returnSkyColor = () => {

return color; // 변수가 전역 스코프에 있으므로 함수 블록 내에서도 접근 가능 

};

console.log(returnSkyColor()); // blue

 

4. Block Scope (블록 스코프)

block scope (블록 스코프)는 변수가 특정 블록 내에서만 접근 가능하도록 정의된 스코프를 의미한다.

변수가 중괄호 { } 안에서 정의되면, 해당 변수는 그 블록 내의 코드에서만 접근할 수 있다.

이러한 변수를 local variable (지역 변수)라고 부르며, 동일한 블록 내의 코드에서만 사용할 수 있다.

const logSkyColor = () => {

 let color = 'blue'; // local scope(함수 내부)에서 정의

 console.log(color); // 함수 블록 내부에서만 접근 가능

};

logSkyColor(); // blue

console.log(color); // ReferenceError, 함수 블록 외부에서 접근하려고 하면 에러

 

5. Scope Pollution (스코프 오염) 

global variables (전역 변수)를 선언하면, 이 변수는 전역 네임스페이스에 저장된다.

 

전역 네임스페이스는 프로그램 어디에서나 변수에 접근할 수 있게 해주는 공간이다.

 

전역 네임스페이스에 너무 많은 전역 변수가 존재하거나,
다른 스코프에서 변수를 재사용하려 하면 스코프 오염이 발생한다. 

 

스코프 오염이 발생하면 변수의 충돌이나 오류가 발생할 가능성이 커진다.
 

let num = 50; // global scoope 

const logNum = () => {
num = 100; // 재할당 - 전역 변수 num에 영향
console.log(num);
};

logNum(); // 100 출력
console.log(num); // 100 출력

 

const logSkyColor = () => {
  const dusk = true;
  let color = 'blue'; 
  if (dusk) {
    let color = 'pink';
    console.log(color); // pink
  }
  console.log(color); // blue
};

console.log(color); // ReferenceError

 

따라서, 전역 변수를 최소화하고, 블록 스코프를 활용하여 변수의 스코프를 가능한 한 좁게 설정하는 것이 좋다. 


 

예제 코드 : https://github.com/inyeongjang/Snoopy/blob/main/week02/4-Scope.js

 

Snoopy/week02/4-Scope.js at main · inyeongjang/Snoopy

Contribute to inyeongjang/Snoopy development by creating an account on GitHub.

github.com

 

출처/참고자료 : https://www.codecademy.com/enrolled/courses/introduction-to-javascript

 

Learn JavaScript | Codecademy

Begin your web development journey with our JavaScript course. Explore dynamic scripting for interactive web solutions.

www.codecademy.com

 

'Programming > JavaScript' 카테고리의 다른 글

[JavaScript] Loops & Iterators  (0) 2024.09.28
[JavaScript] Arrays (배열)  (0) 2024.09.25
[JavaScript] Functions (함수)  (0) 2024.09.25
[JavaScript] Conditional Statements (조건문)  (0) 2024.09.25
[JavaScript] JavaScript 기초  (0) 2024.09.23