[Javascript] Strict mode
자바스크립트는 1995년도에 개발된 오래된 언어입니다. 현재 2022년까지 무려 27년이 되었습니다. 긴 역사만큼 수많은 문법과 구문들이 자바스크립트에 등장했고, 그 중에서는 현재 사용하면 안정성 혹은 효율을 떨어뜨리는 구문도 존재합니다. 이런 구문들을 피하려면 왜 이 구문이 문제였고, 어떤 방식으로 피할지에 대해 알아야하는데, 이 구문들이 하나둘씩 늘어나다 보니 개발자들에게 부담으로 다가오기 시작했습니다.
그래서 자바스크립트는 Strict mode(엄격 모드)를 지원하기 시작해서 이러한 구문들을 자바스크립트 측에서 발견하여 알려주고, 개발자는 따로 알아두지 않아도 되도록 만들었습니다.
1. Strict mode
Strict 모드는 개발자에게 편의성을 주는 모드입니다. 서론에서 언급했듯이, 여러 이유로 현재 사용이 금지된 구문들을 찾아서 개발자들에게 알려주도록 경고를 띄워주는 역할을 합니다.
Strict 모드의 반대말이자 기본값은 Sloppy mode(느슨한 모드)라고 부릅니다. 엄격 모드와 느슨한 모드는 한 코드 내부에서 공존할 수 있기에 필요한 경우에 따라 두 모드를 왕래할 수 있습니다.Strict 모드의 적용방식은 스크립트 전체에 적용하는 방식과 함수 블록 내부에서 적용하는 방ㅁ식 두 가지가 있는데, 각 방식의 적용 방법은 다음과 같습니다.
'use Strict';
//스크립트 전체에 Strict 모드 적용
function foo() {
'use Strict';
//함수 내부에서 Strict 모드 적용
}
2. Strict 모드의 적용 범위
그럼 이제 Strict 모드가 어떤 구문들을 제한하고 있는지에 대해서 알아보겠습니다. 꽤 많은 구문들을 제한하고 있지만, 자주 사용될 법한 제한 구문들을 정리했습니다.
분류 | 제한 구문 |
변수 |
var 명령 사용 금지 |
예약어 채택 가능성이 있는 단어를 예약어로 포함시켜 사용 금지 | |
인수/프로퍼티명의 중복 금지 | |
undefined, null로의 대입 금지 | |
명령 | eval() 내부에서 선언된 변수의 외부 사용 금지 |
with 명령 사용 금지 | |
delete 명령 사용 금지 | |
argument 객체의 요소 값 변경 금지 | |
readonly 프로퍼티 대입 금지 | |
기타 구문 | 함수 내부의 this가 global 객체를 참조하지 않고 undefined로 정의 |
숫자 리터럴에 8진수 값 사용 금지 (0~) |
참조
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Strict_mode