[JS] 지역변수, 전역변수, Scope

2025. 2. 21. 14:07·👩‍💻 Programming/JavaScript
반응형

Scope

범위, 영역을 뜻하는 말로 변수 접근 규칙에 따른 유효 범위

  • 자바스크립트는 기본적으로 함수가 선언되는 동시에 자신만의 Scope를 갖음
  • 그 범위를 벗어나면 오류 발생 ❗️

지역 변수(Local variable)

function solve() {
	let x = 3; // 지역 변수
	console.log(x);
}

solve(); // ✅ OK

console.log(x)

// ❌ 에러 발생
// 변수 x의 스코프는 solve() 함수 내에서만이다. 
// 변수가 유효한 범위 내에 있지 않기 때문에 정의되지 않았다는 오류 발생
  • { } 중괄호로 감싼 코드를 블록문(Block Statement)
  • 블록문 안에 선언된 변수를 로컬 변수 혹은 지역 변수(Local variable)
    • 지역 변수는 블록문 내에서만 사용할 수 있는 변수

 

전역 변수(Global variable)

let x = 3; // 전역 변수
function solve() {
	console.log(x);
}

solve(); // ✅ OK
console.log(x); // ✅ OK
  • 블록문 밖에서 선언된 변수는 블록문 안에서도 사용 가능 → 글로벌 변수 혹은 전역 변수(Global variable)

 

지역 변수와 전역 변수의 우선순위 ?!

let x = 3;

function solve(){
	let x = 5;
	console.log(x);
}

solve(); // ✅ 5
console.log(x) // ✅ 3
  1. 블록문 내부에서 선언된 지역 변수가 있는지를 먼저 확인
  2. 있으면 그 지역 변수를 사용하고, 없을 경우 전역 변수 사용

즉, 지역 변수는 함수 내에서 전역변수 보다 더 높은 우선순위를 가진다!

 

 

변수를 정의하는 키워드 (var VS let VS const)

  • 자바스크립트는 기본적으로 함수 단위로 자신만의 scope를 가짐
for (let i = 0; i < 5; i++) console.log(i);
console.log(i)// ❌ 에러 발생

for (var i = 0; i < 5; i++) console.log(i);
console.log(i)// ✅ 5
  • `var`: 변수 선언 시 block문은 없다고 생각하고 코드가 동작되며, for 안에서 선언하더라도 순선대로 코드 실행됨
    • 되도록이면 사용하지 않도록 함
    • 함수 스코프(function-scope)
  • `let`: 한번 할당된 변수 값을 재이용해서 다른 값으로 할당할 일이 생겼을 때 사용하기 좋음
    • 블록 스코프(block-scope): 주어진 코드 블록 안에서만 사용이 가능하며, 밖에서는 접근할 수 없음
  • `const` : 값이 변하지 않는 상수를 정의할 때 사용내가 이미 할당한 값을 보호하고 싶을 때 사용

 

let, const의 예시 코드

let a = 10;
if (true){
	let a = 20;
	console.log(a); // 20
}
console.log(a); // 10

var a = 10;
if (true){
	var a = 20;
	console.log(a); // 20
}
console.log(a); // 20 -> 함수 안의 변수가 밖에도 영향을 미침

 

 


( •̀ω•́ )و✧ 한 줄 컷 !

그렇다면 마지막 정리하는 시간 ~ 두둥 탁 ~!

면접관이 "전역변수와 지역변수는 각각 무엇이며, 어떤 경우에 사용하는지 설명해주세요" 라고 말한다면 ?!

 

 

 

전역변수는 함수 바깥에 선언하여 클래스 전체에서 사용 가능한 변수입니다.
여러 메소드에서 공통적으로 사용할 수 있습니다.

지역 변수는 함수 안에 선언되어 해당 함수 속에서만 사용 가능한 변수입니다,
지역 변수는 해당 메소드가 호출되어 메모리를 할당 받은 후 종료되면 소멸되어 다시 사용할 수 없습니다.

 

대충 이렇게 설명하면 좋을 것 같다 ~! 화이팅이다 !! 끝 !

반응형

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

[JS] 기술면접 라이브코딩 대비  (1) 2025.06.29
[JS] 이벤트의 모든 것 : 이벤트 핸들러, 버블링, 캡쳐링  (1) 2025.02.20
[JS] Closure(클로저)란?  (1) 2025.02.20
Node.js readline 모듈이란?  (5) 2024.10.13
'👩‍💻 Programming/JavaScript' 카테고리의 다른 글
  • [JS] 기술면접 라이브코딩 대비
  • [JS] 이벤트의 모든 것 : 이벤트 핸들러, 버블링, 캡쳐링
  • [JS] Closure(클로저)란?
  • Node.js readline 모듈이란?
S J ʕ·͡ᴥ·ʔ
S J ʕ·͡ᴥ·ʔ
  • S J ʕ·͡ᴥ·ʔ
    누워서 코딩하기 - 떡 먹는 것처럼 쉽고 재밌게!
    S J ʕ·͡ᴥ·ʔ
  • 전체
    오늘
    어제
    • 분류 전체보기 (99)
      • 👩‍💻 Programming (25)
        • React (18)
        • JavaScript (5)
        • Swift (1)
        • JAVA (1)
      • 🌐 CS-Study (16)
        • CS 스터디 (13)
        • 컴퓨터 네트워크 (3)
      • 🔧 Backend (20)
      • 🎨 UX & HCI (12)
      • 📊 Data analysis (7)
      • 📚 License study (19)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
S J ʕ·͡ᴥ·ʔ
[JS] 지역변수, 전역변수, Scope
상단으로

티스토리툴바