자바스크립트의 엄격모드(Strict Mode)
'use strict';를 상단에 작성함으로써 엄격모드를 실행할 수 있게 된다. 엄격모드란 무엇일까?- ES5가 나온 후 하위 호환성 이슈 때문에 변경사항 대부분이 디폴트로는 활성화되지 않도록 설계되었다. 대신
'use strict'라는 특별한 지시자를 사용했을 때에만 활성화되게 해두면서 엄격모드라는 게 생겼다. - 엄격모드를 실행하면 스크립트가 모던한 방식으로 작동하게 된다.
엄격모드의 쓰임새
var,let,const를 통해 선언을 하지 않았으나 자바스크립트 엔진이 암묵적으로 전역 객체에 프로퍼티를 동적으로 생성한 경우를 암묵적 전역 변수라 한다. 이는 잠재적인 오류를 발생시킬 수 있는데, 그러한 가능성을 낮추게 하기 위해 strict mode가 유용할 수 있다.- strict mode는 자바스크립트 언어의 문법을 보다 엄격히 적용하여 기존에는 무시되던 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킨다.
엄격모드를 통해 발생시킬 수 있는 명시적 에러
- 암묵적 지역 변수
: 선언하지 않은 변수를 참조하면 ReferenceError가 발생한다. - 변수, 함수, 매개변수의 삭제
: 삭제하지 못하게 만든다. - 매개변수 이름의 중복
: 중복된 함수 파라미터 이름을 사용하면 SyntaxError가 발생한다. - with 문의 사용
: with 문을 사용하면 SyntaxError가 발생한다. - 일반 함수의 this
: strict mode 에서 함수를 일반 함수로서 호출하면 this에 undefined가 바인딩된다. 생성자 함수가 아닌 일반 함수 내부에서는 this를 사용할 필요가 없기 때문이다. 이때 에러는 발생하지 않는다.
[참고자료]
https://poiemaweb.com/js-strict-mode
https://ko.javascript.info/strict-mode