[JavaScript 기본] 스코프

2025. 11. 2. 16:56·React/JavaScript 기본

스코프(`scope`)는 "변수나 함수에 접근할 수 있는 범위"를 의미함


1. 스코프의 종류

구분 설명 예시
전역 스코프(`Global Scope`) 코드 전체에서 접근 가능 함수 밖에서 선언된 변수
지역 스코프(`Local Scope`) 특정 코드 블록 `{ }`안에서만 접근 가능 함수 내부, 블록 내부에서 선언된 변수

2. 전역 스코프 & 지역 스코프 예시

let a = 1; // 전역 스코프

function funcA() {
  let b = 2; // 지역 스코프 (funcA 내부에서만 접근 가능)
  console.log(a); // 가능 (전역 변수 접근)

  function funcB() {} // funcA 내부 지역 스코프 함수
}

funcA();

console.log(a);  // 가능 (전역)
console.log(b);  // ReferenceError: b is not defined
console.log(funcB); // ReferenceError (funcA 내부 전용)

요약 하자면

  • `a`는 전역 -> 어디서든 접근 가능
  • `b`, `funcB`는 `funcA` 내부에서만 접근 가능
  • 함수 안에서 선언된 모든 변수/함수는 "지역 스코프"

3. 블록 스코프 (`if`, `for`, `while` 등)

  • `let`, `const`는 블록 스코프를 가짐
  • 즉, `{ }` 내부에서만 접근 가능함
if (true) {
  let c = 1; // 블록 스코프
  console.log(c); // 1
}
console.log(c); // ReferenceError

4. 함수 선언문의 블록 스코프 주의점

  • `function` 선언문은 브라우저 환경에서 다르게 동작할 수 있음
if (true) {
  let c = 1;
  function funcC() {} // 일부 환경에서는 전역 스코프처럼 동작
}

console.log(funcC); // 브라우저에서는 접근 가능할 수도 있음

주의할 점

  • ES6 표준에서는 `function` 선언도 블록 스코프 안에 포함돼야 하지만,
    브라우저(특히 비엄격 모드) 에서는 여전히 전역 함수로 인식될 수 있음.
  • Node.js나 "use strict" 모드에서는 `funcC`가 블록 내부 전용으로 제한됨.
  • 즉, "엄격 모드"("use strict")에서는 `if`, `for` 내부에서 선언한 함수는 외부에서 접근 불가.
"use strict";
if (true) {
  function test() {}
}
console.log(test); // ReferenceError

5. `for`문 블록 스코프

for (let i = 0; i < 3; i++) {
  let d = i * 2;
  function funcD() {} // 브라우저에서는 전역처럼 인식될 수도 있음
}

// console.log(d); ReferenceError
console.log(funcD); // 브라우저에서는 가능 (비엄격 모드)

정리하자면,

  • `let` / `const`로 선언된 변수는 for문 내부에서만 유효
  • 하지만 `function` 선언문은 환경마다 다르게 스코프 처리됨
    -> 표준상 블록 내부 전용이지만, 브라우저에선 전역 등록 가능
  • 안전하게 쓰려면?
    • 함수는 항상 "함수 안에서 선언"
    • 블록(`if`, `for`) 안에서는 함수 표현식(`=const func = () => {}`) 사용하기!"

6. 스코프 체인

  • 스코프는 계층 구조로 연결되어 있음
let x = 1;

function outer() {
  let y = 2;
  function inner() {
    let z = 3;
    console.log(x + y + z); // 1 + 2 + 3
  }
  inner();
}
outer();
  • 스코프 체인
    • `inner` -> `outer` -> `global` 순서로 변수 탐색
    • 자바스크립트는 항상 가장 가까운 스코프부터 찾음

 

구분 접근 가능 범위 비고
전역 스코프 전체 코드 어디서든 접근 가능
함수 스코프 함수 내부 함수마다 독립 공간
블록 스코프 `{ }` 내부 `let`, `const` 전용
스코프 체인 내부 → 외부 순서로 탐색 가장 가까운 변수부터 참조

'React > JavaScript 기본' 카테고리의 다른 글

[JavaScript 기본] 배열  (0) 2025.11.02
[JavaScipt 기본] 객체(object)  (0) 2025.11.02
[JavaScript 기본] 콜백 함수  (0) 2025.11.01
[JavaScript 기본] 함수 표현식 & 화살표 함수  (0) 2025.10.31
[JavaScript 기본] 함수 정리  (0) 2025.10.29
'React/JavaScript 기본' 카테고리의 다른 글
  • [JavaScript 기본] 배열
  • [JavaScipt 기본] 객체(object)
  • [JavaScript 기본] 콜백 함수
  • [JavaScript 기본] 함수 표현식 & 화살표 함수
이도서
이도서
  • 이도서
    도서의 코딩노트
    이도서
  • 전체
    오늘
    어제
    • 분류 전체보기 (249)
      • Today I Learned (79)
        • 2024 (78)
      • Swift (25)
        • Swift 문법 정리 (19)
        • RxSwift (5)
      • Swift Study (12)
        • Playground (2)
        • Storyboard (9)
        • UIKit (1)
      • Flutter (27)
        • Dart 언어 (16)
        • Flutter Study (11)
      • React (37)
        • HTML & CSS (8)
        • JavaScript 기본 (12)
        • JavaScript 심화 (14)
        • Node.js (2)
        • React (1)
      • Git (3)
      • 코딩테스트 (60)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 개발 공부 공유 링크
  • 인기 글

  • 태그

    html
    React
    ios
    storyboard
    ios앱개발자
    Flutter
    CLASS
    Swift
    객체지향
    Til
    함수
    iOS앱개발
    DART
    function
    javascript
    javascript 기본
    코딩테스트
    코딩테스트 level.1
    코딩테스트Level.1
    내일배움캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이도서
[JavaScript 기본] 스코프
상단으로

티스토리툴바