728x90
https://ko.javascript.info/strict-mode
엄격 모드
ko.javascript.info
- 자바스크립트는 꽤 오랫동안 호환성 이슈 없이 발전해왔음
- 기존의 기능을 변경하지 않으면서 새로운 기능이 추가됨
- 덕분에 기존에 작성한 코드는 절대 망가지지 않는다는 장점이 있었지만 자바스크립트 창시자들이 했던 실수나 불완전한 결정이 언어 안에 영원히 박제된다는 단점도 생겼음
- 이런 상황은 ECMAScript(ES5)가 등장하지 전인 2009년까지 지속되었음
- 새롭게 제정된 ES5에서는 새로운 기능이 추가되고 기존 기능 중 일부가 변경됨
- 기존 기능을 변경하였기 때문에 하위 호환성 문제가 생길 수 있었음
- 그래서 변경사항 대부분은 ES5의 기본 모드에선 활성화되지 않도록 설계됨
- 대신 use strict라는 특별한 지시자를 사용해 엄격 모드(strict mode)를 활성화 했을 때만 이 변경사항이 활성화되게 해놓음
✏️ use strict
지시자 "use strict", 혹은 'use strict'는 단순한 문자열처럼 생겼지만 이 지시자가 스크립트 최상단에 오면 스크립트 전체가 "모던한" 방식으로 동작
-
"use strict" // 이 코드는 모던한 방식으로 실행 ...
- 함수에 대해 학습하기 전, "use strict"는 스크립트 최상단이 아닌 함수 본문 맨 앞에 올 수 도 있음
- 이렇게 하면 오직 해당 함수만 엄격 모드로 실행
- 엄격 모드는 대개 스크립트 전체에 적용
🚨 "use strict"는 반드시 최상단에 위치시키기
- "use strict"는 스크립트 최상단에 있어야 함
- 그렇지 않으면 엄격 모드가 활성화되지 않을 수도 있음
- 다음 코드에서는 엄격 모드가 활성화되지 않음
-
alert("some code"); // 하단에 위치한 "use strict"는 스크립트 상단에 위치하지 않으므로 무시 "use strict"; // 엄격 모드가 활성화되지 않음
-
- "use strict"의 위에는 주석만 사용할 수 있음
🚨 "use strict"를 취소할 방법은 없음
- 자바스크립트 엔진을 이전 방식으로 되돌리는 "no use strict" 같은 지시자는 존재하지 않음
- 일단 엄격 모드가 적용되면 돌이킬 방법은 없음
✏️ 브라우저 콘솔
- 개발한 기능을 테스트하기 위해 브라우저 콘솔을 사용하는 경우, 기본적으로 use strict가 적용되어있지 않음
- use strict에 영향을 받는 경우라면 개발자는 기대하지 않았던 결과를 얻을 수 있음
- 그렇다면 어떻게 해야 콘솔에서 use strict를 사용할 수 있나?
- use strict를 입력한 후, Shift + Enter 키를 눌러 줄 바꿈 해 원하는 스크립트 입력
-
'use strict'; <Shift + Enter를 눌러 줄 바꿈> // ... 테스트하려는 코드 <Enter를 눌러 실행>
-
- 이 기능은 Firefox와 Chrome같은 유명한 브라우저에서 대부분 사용 가능
- 브라우저가 오래 되어서 콘솔 창에 use strict를 입력하는 게 불가능하다면, use strict를 적용하는 가장 확실한 방법은 아래와 같은 코드를 래퍼로 감싸면 됨
-
(function() { 'use strict'; // ... 테스트하려는 코드 })()
-
- use strict를 입력한 후, Shift + Enter 키를 눌러 줄 바꿈 해 원하는 스크립트 입력
✏️ 'use strict'를 꼭 사용해야 하는가?
- 당연하게 사용해야 하는 것은 아님
- 모던 자바스크립트는 '클래스'와 '모듈'이라 불리는 진일보한 구조를 제공
- 이 둘을 사용하면 use strict가 자동으로 적용됨. 따라서 이 둘을 사용하고 있다면 스크립트에 "use strict"를 붙일 필요가 없음
✅ 결론
- 코드를 클래스와 모듈을 사용해 구성한다면 "use strict"를 생략해도 됨. 아직 이 둘을 배우지 않았으니 "use strict"를 꼭 붙이자
- 엄격 모드와 비 엄격 모드의 차이를 보이는 기능은 많지 않음
- 엄격 모드를 사용하면 개발자의 삶의 질이 조금 더 높아짐
728x90
'이론 (Front-end) > JavaScript' 카테고리의 다른 글
[모던 자바스크립트] 2.4 변수와 상수 (0) | 2023.01.08 |
---|---|
[모던 자바스크립트] 2.2 코드 구조 (0) | 2022.12.29 |
[모던 자바스크립트] 2.1 Hello, world! (0) | 2022.12.28 |