writed by johan

Strict Mode가 무엇인가?

오류를 줄이기 위해 엄격하게 자바스크립트 코드를 작성하도록 허용하는 모드이다.
문법적 오류, 잠재적인 오류에 대해 명시적인 에러를 발생시킨다.

Strict Mode에 대한 조언

전역에 strict mode를 적용하지 말자.

  1. strict mode 스크립트와 non-strict mode 스크립트를 혼용하면 오류를 발생하기 쉽다.
  2. 사용한다면 즉시 실행 함수로 스크립트 전체를 감싸서 스코프를 구분하자

함수 단위로도 strict mode를 적용하지 말자

  1. strict mode가 적용된 함수가 참조할 함수 외부의 컨텍스트에 strict mode를 적용하지 않으면 문제가 생길 수 있다.
(function() {
	var let = 10;

	function foo() {
		'use strict';

		let = 20; // SyntaxError: Unexpected strict mode reserved word
	}
	foo();
}());

Strcit mode가 발생시키는 에러

  1. 선언하지 않은 변수 참조시 ReferenceError 발생
  2. 변수 ,함수, 매개변수를 delete 연산자로 삭제할 경우 SyntaxError 발생
  3. 중복된 매개변수 이름 사용시 SyntaxError 발생
  4. with문 사용시 SyntaxError 발생

일반 함수에서의 this

생성자 함수가 아닌 일반 함수 내에서는 this를 사용할 필요가 없기 때문에, strict mode에서 일반 함수로 함수를 호출하면 this에 undefined가 바인딩 된다.

🤔 strict mode를 사용하지 않으면 되는거 아닌가?

JavaScript의 strict mode는 ECMAScript 5(ES5)에서 도입되었으며, 이후의 ECMAScript 버전들도 이를 유지하고 있다. 현대 JavaScript 개발 환경에서는 기본적으로 ES6 이상의 버전을 사용하며, ES6 모듈은 기본적으로 strict mode로 실행된다.

Node.js에서는 각 파일이 별도의 모듈로 취급되므로, Node.js 환경에서 작성된 코드는 기본적으로 strict mode를 따른다.

React와 같은 프레임워크를 사용하는 경우, 일반적으로 Babel과 같은 트랜스파일러와 함께 사용하여 최신 JavaScript 문법을 더 넓게 호환 가능한 코드로 변환한다. Babel은 트랜스파일 과정 중에 코드를 strict mode로 변환한다.

따라서 직접 'use strict'; 구문을 추가하지 않더라도 대부분의 현대 JavaScript 개발 환경에서는 이미 코드가 strict mode 조건 하에 실행된다.

profile
Whether you're doing well or not, just keep going👨🏻‍💻🔥

0개의 댓글