자바스크립트에서 "use strict"는 코드 실행 방식에 영향을 주는 특별한 지시문(directive)이다. 오류를 더 엄격하게 감지하고, 일부 잠재적인 버그를 방지하기 위한 안전 장치 역할을 한다.
"use strict"란?"use strict"는 자바스크립트에서 Strict Mode(엄격 모드)를 활성화하는 지시문이다. 이 모드를 사용하면 보다 안전하고 예측 가능한 코드 실행이 보장된다.
"use strict"; // 이 줄 이후부터 엄격 모드 적용
let x = 3.14;
"use strict" 또는 'use strict'로 명시자바스크립트는 초기 설계 시 유연함과 관용성(forgiveness)을 강조했기 때문에, 실수를 해도 경고 없이 넘어가는 경우가 많다.
Strict Mode는 이런 관용적인 동작을 제한하고 오류를 강제로 발생시켜 개발자가 문제를 빨리 인지하도록 도와준다.
"use strict";
x = 10; // ❌ ReferenceError: x is not defined
→ 선언하지 않은 변수는 자동으로 var로 처리되지 않고 에러 발생.
"use strict";
const obj = {};
Object.defineProperty(obj, "x", { value: 42, writable: false });
obj.x = 9; // ❌ TypeError: Cannot assign to read only property
"use strict";
function sum(a, a, b) { // ❌ SyntaxError
return a + b;
}
this가 undefined로 유지됨 (전역 객체 바인딩 금지)"use strict";
function f() {
console.log(this); // ✅ undefined
}
f();
→ 엄격 모드에서는 this가 자동으로 window(또는 global 객체)로 바인딩되지 않음.
"use strict";
delete Object.prototype; // ❌ TypeError
아직 사용되지 않았지만 미래에 사용할 가능성이 있는 키워드는 사용할 수 없습니다.
"use strict";
let public = 1; // ❌ SyntaxError
"use strict";
function doSomething() {
// strict mode 적용됨
}
function processData() {
"use strict";
// 이 함수 내부만 strict mode 적용
}
함수 단위로)ES6부터는 모듈(.mjs)이나 클래스 내 코드는 자동으로 strict mode가 적용된다.
즉, 명시적으로 쓰지 않아도 엄격 모드가 기본이라는 점도 기억해두자!
| 항목 | 엄격 모드 적용 결과 |
|---|---|
| 선언 없는 변수 사용 | 에러 발생 |
| 중복된 매개변수 | 에러 발생 |
this의 암시적 전역 바인딩 | undefined 유지 (window에 바인딩 안 됨) |
| 예약어 사용 | 금지됨 |
| 상수 변경/삭제 | 에러 발생 |