<엄격 모드란?>
Strict mode는 JavaScript에 ECMAScript 5에서 도입된 기능으로, 더 엄격한 규칙을 적용하여 코드를 작성할 수 있게 합니다. 엄격 모드는 더 엄격한 구문 해석과 오류 처리를 적용하여 코드가 더욱 안전하게 실행되도록 합니다.
엄격 모드에서는 선언되지 않은 변수 사용이 금지되며, 이 외에도 여러 규칙이 강제됩니다.
일반 JavaScript에서는 쓰기 불가능한 속성에 값을 할당하더라도 오류 메시지를 받지 않습니다.
하지만 **엄격 모드(strict mode)**에서는 다음과 같은 경우 오류가 발생합니다:
- 쓰기 불가능한 속성에 값 할당
- **읽기 전용 속성(getter-only property)**에 값 할당
- 존재하지 않는 속성, 변수, 객체에 값 할당
이러한 제한 덕분에 엄격 모드는 잘못된 할당을 방지하고 코드를 보다 안전하게 유지할 수 있도록 돕습니다.
<엄격 모드의 장점>
- 조용한 오류 제거: 조용히 지나가는 오류를 예외 처리로 변환하여 디버깅을 용이하게 합니다.
- 최적화: JavaScript 엔진의 최적화를 지원해 엄격 모드의 코드가 비엄격 모드보다 빠르게 실행될 가능성이 있습니다.
- 미래 호환성(Future-Proofing): 향후 ECMAScript 버전에서 정의될 가능성이 있는 구문을 금지하여 코드의 호환성을 높입니다.
- 안전하지 않은 작업 방지: 글로벌 객체 접근과 같은 안전하지 않은 작업에 오류를 발생시킵니다.
<엄격 모드 사용 방법>
두 가지 방식으로 엄격 모드 활성화할 수 있습니다.
- 전체 파일에 적용: 일 맨 위에 "use strict";를 추가하면 파일 전체에 엄격 모드가 적용됩니다.
"use strict";
let x = 3.14; - 함수 내부에 적용: 특정 함수의 첫 줄에 "use strict";를 추가하여, 해당 함수의 스코프에서만 엄격 모드를 활성화할 수 있습니다.
function myFunction() {
"use strict";
let y = 3.14;
<엄격 모드에서는 다음과 같은 동작이 허용되지 않습니다>
- 변수를 선언 없이 사용: 변수를 선언하지 않고 사용하는 것이 금지됩니다.
- 객체를 선언 없이 사용: 선언되지 않은 객체를 사용하는 것이 금지됩니다.
- 변수(또는 객체) 삭제: 변수나 객체를 삭제할 수 없습니다.
- 함수 삭제: 함수를 삭제할 수 없습니다.
- 중복된 매개변수 이름 사용: 함수의 매개변수 이름이 중복되면 오류가 발생합니다.
- 8진수 리터럴: 8진수 리터럴 사용이 금지됩니다.
- 8진수 이스케이프 문자: 8진수 이스케이프 문자 사용이 금지됩니다.
- 읽기 전용 속성에 값 할당: 읽기 전용 속성에 값을 할당할 수 없습니다.
- 읽기 전용 접근자 속성에 값 할당: get 접근자만 있는 속성에 값을 할당할 수 없습니다.
- 삭제 불가능한 속성 삭제: 삭제할 수 없는 속성 삭제가 금지됩니다.
- eval을 변수명으로 사용: eval을 변수 이름으로 사용할 수 없습니다.
- arguments를 변수명으로 사용: arguments를 변수 이름으로 사용할 수 없습니다.
- with 문 사용: with 문을 사용할 수 없습니다.
참고 자료 :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
https://www.w3schools.com/js/js_strict.asp
https://www.freecodecamp.org/news/how-to-use-strict-mode-in-javascript/
https://www.geeksforgeeks.org/use-strict-in-javascript/
'웹 개발 (Frontend Developer) > JavaScript' 카테고리의 다른 글
JavaScript에서 == 와 === 차이점 (4) | 2024.11.07 |
---|---|
프로토타입 (Prototype) (2) | 2024.11.06 |
이벤트 루프 (Event Loop) (3) | 2024.10.30 |
콜 스택 (Call Stack)과 힙 (Heap) (1) | 2024.10.30 |
IIFE (Immediately Invoked Function Expression) (1) | 2024.10.01 |