ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JS Deep Dive 20장. strict mode
    개발/자바스크립트로의 깊은 잠수 2026. 7. 7. 19:47

    자바스크립트에는 strict mode라는 기능이 있습니다.

    앞선 장에서 살펴봤듯이, 자바스크립트는 높은 자유도를 가진 언어입니다. 최대한 에러를 발생시키지 않는 쪽으로 설계되어 있죠.

    하지만 에러가 발생하지 않으면 문제가 생겼을 때 원인을 찾기가 정말 어려워집니다. 어디가 잘못되었는지 콘솔에 안 찍히기 때문이에요.

    그래서 에러를 일부러 발생시키는, 좀 더 엄격한 모드인 strict mode가 ES5부터 추가되었어요.

     

    strict mode 사용법

    전역의 맨 첫줄 또는 함수 몸체의 맨 첫줄에 'use strict'; 를 추가하면 됩니다.

     

    strict mode가 발생시켜주는 에러

    암묵적 전역 방지

    선언하지 않은 변수를 참조했을 때 ReferenceError를 발생시킵니다.

    원래는 선언 없이 x = 1; 같은 짓을 했을때 에러 없이 전역객체에 x를 암묵적으로 할당해버립니다.

     

    delete 연산자를 활용한 변수, 함수, 매개변수의 삭제

    delete 연산자로 변수, 함수, 매개변수를 삭제하면 SyntaxError를 발생시킵니다.

    객체의 key만 지울 수 있도록 범위를 강제해주는 느낌이죠.

     

    중복된 매개변수 이름

    함수 매개변수에 이름이 중복되면 SyntaxError를 발생시킵니다. (원래는 이게 허용된단 말이야..??)

    function add(x, x) { // SyntaxError
      return x + x;
    }

     

    with 문의 사용

    with문이 뭐냐. 객체를 넣어주면 해당 스코프 체인에 그 객체를 추가해주는 기능입니다.

    성능 문제, 가독성 문제가 있어서 요즘은 원체 안 쓰는 기능이라고 합니다.

    strict mode를 쓰면 with 문이 사용되었을 때 SyntaxError를 발생시킵니다.

     

     

    strict mode가 변화시키는 것

    일반 함수의 this가 undefined

    일반 함수의 this가 undefined가 됩니다.

    그러면 this를 참조하지 말아야 하는 곳에서 더 빠르게 ReferenceError를 발생시킬 수 있겠죠!

     

    arguments 객체의 원본 유지

    매개변수에 전달된 인수를 재할당해도 arguments 객체는 변경되지 않습니다.

     

    실무에서의 활용

    요즘은 거의 안 쓰는.. 구시대의 유물 같은 느낌이에요.

    ESLint가 훨씬 더 엄격하고 편리하게 잡아줍니다.

    그리고 요즘은 많이들 TypeScript를 사용하기 때문에, 코드 편집기 단에서 이런 에러를 조기에 잡아낼 수 있어요.

    댓글

Copyright 2022. ProdYou All rights reserved.