-
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를 사용하기 때문에, 코드 편집기 단에서 이런 에러를 조기에 잡아낼 수 있어요.
'개발 > 자바스크립트로의 깊은 잠수' 카테고리의 다른 글
JS Deep Dive 23장. 실행 컨텍스트 (1) (0) 2026.07.21 JS Deep Dive 22장. this (0) 2026.07.14 JS Deep Dive 18장. 함수와 일급 객체 (0) 2026.06.16 자바스크립트의 함수를 잘못 사용하는 방법 (0) 2026.06.09 프로퍼티 어트리뷰트가 뭔가요? (0) 2026.06.02