Programing/javascript

함정에 빠지기 쉬운 자바스크립트 문법12

2025. 5. 5. 09:50
반응형

12편에서는 스코프, 클로저, 변수 선언 시 발생하는 전형적인 혼동 사례를 정리합니다.

✅ 1. var는 블록 스코프를 가지지 않는다

if (true) {
  var x = 10;
}
console.log(x); // 10

📌 설명

var는 함수 스코프만 가지며, 블록({})을 스코프로 인식하지 않습니다.


✅ 2. 클로저에서 반복문 변수 캡처 문제

var funcs = [];
for (var i = 0; i < 3; i++) {
  funcs.push(() => console.log(i));
}
funcs[0](); // 3
funcs[1](); // 3
funcs[2](); // 3

📌 설명

클로저는 동일한 i를 참조하므로 루프 종료 시점의 값이 모두 사용됩니다.

📌 대처

let을 사용하거나 즉시 실행 함수(IIFE)를 통해 캡처합니다.


✅ 3. 중첩 함수의 this는 상위 컨텍스트가 아님

const obj = {
  value: 42,
  method: function () {
    function inner() {
      console.log(this.value); // undefined
    }
    inner();
  }
};
obj.method();

📌 설명

중첩된 일반 함수의 this는 글로벌 컨텍스트 또는 strict 모드에서는 undefined입니다.

📌 대처

화살표 함수 또는 .bind(this) 사용


✅ 4. 변수 선언 없이 할당하면 전역 변수가 된다

function test() {
  x = 10;
}
test();
console.log(x); // 10

📌 설명

선언 없이 값을 할당하면 암묵적으로 전역 변수로 등록되어 예기치 않은 오염이 발생합니다.

📌 대처

항상 let, const, var로 변수 선언을 명시합니다.


✅ 5. 함수 선언식과 함수 표현식의 차이

sayHi(); // OK
function sayHi() { console.log("hi"); }

sayBye(); // TypeError
var sayBye = function() { console.log("bye"); }

📌 설명

함수 선언식은 호이스팅되지만, 함수 표현식은 변수만 호이스팅되고 함수 할당은 런타임에 이뤄집니다.


✅ 결론

스코프와 클로저는 자바스크립트의 핵심 개념입니다. 이를 이해하고 변수 선언 방식의 차이를 구분하는 습관은 코드 안정성 향상에 큰 도움이 됩니다.

반응형

'Programing > javascript' 카테고리의 다른 글

JavaScript 비교 연산자  (1) 2025.05.18
JavaScript 조건문  (0) 2025.05.18
JavaScript 반복문  (0) 2025.05.18
함수 선언식과 함수 표현식의 차이  (2) 2025.05.05
함정에 빠지기 쉬운 자바스크립트 문법11  (1) 2025.05.05
함정에 빠지기 쉬운 자바스크립트 문법10  (0) 2025.05.05
함정에 빠지기 쉬운 자바스크립트 문법9  (0) 2025.05.05
함정에 빠지기 쉬운 자바스크립트 문법8  (1) 2025.05.05
'Programing/javascript' 카테고리의 다른 글
  • JavaScript 반복문
  • 함수 선언식과 함수 표현식의 차이
  • 함정에 빠지기 쉬운 자바스크립트 문법11
  • 함정에 빠지기 쉬운 자바스크립트 문법10
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    자바
    IT블로그
    블로그
    SQL
    읽고 싶은 책
    IT·컴퓨터
    사고 싶은 책
    jsp
    위시리스트
    Java
    js패턴
    IT 관련
    자바스크립트유틸
    자바스크립트
    JavaScript
    php
    디자인패턴
    It
    iT's MY LiFE
    기초
Dongkkase
함정에 빠지기 쉬운 자바스크립트 문법12
상단으로

티스토리툴바