티스토리 뷰

Tech Stack/자바스크립트

strict mode

NoHack 2021. 5. 12. 17:51

strict mode란? 🤔

코드에서 오타나 문법에 대한 실수는 개발자의 의도와 관계 없는 동작을 일으킬 수 있습니다. 그래서 ES5부터 오류를 방지할 수 있는 환경인 strict mode를 지원하기 시작했습니다. 이로 인해 오류 발생의 여지가 있거나, 자바스크립트 엔진의 최적화에 방해가 될 수 있는 코드에 대해 명시적인 에러를 발생시킵니다.

 

ESLint 같은 정적 분석 도구를 사용해도 비슷한 효과를 얻을 수 있습니다.

 

strict mode는 전역 또는 함수 최상단에 'use strict';를 추가함으로써 적용할 수 있습니다.

 

'use strict';

function foo() {
  x = 123; // ReferenceError: x is not defined
}
foo();

 

그리고 strict mode를 적용했을 때, 유의해야 하는 사항이 있습니다.

  • 'use strict';를 사용하면, 그 다음 행부터 strict mode가 적용됩니다.
  • 전역에 적용한 strict mode는 스크립트 단위로 적용되므로, non-strict mode와의 혼용을 주의합시다.

 

엄격하게 발생시키는 에러! 😈

1. 암묵적 전역 변수를 참조하면 ReferenceError가 발생합니다.

 

'use strict';

function foo() {
  x = 123; // ReferenceError: x is not defined
}
foo();

 

2. 변수, 함수, 매개변수를 삭제하면 SyntaxError가 발생합니다.

 

'use strict';

function foo() {}
let x = 123;

delete foo; // SyntaxError: Delete of an unqualified identifier in strict mode.
delete x; // SyntaxError: Delete of an unqualified identifier in strict mode.

 

3. 매개변수가 중복되면 SyntaxError가 발생합니다.

 

'use strict';

// SyntaxError: Duplicate parameter name not allowed in this context
function foo(x, x) {
  return x + x;
}
foo(1, 2);

'Tech Stack > 자바스크립트' 카테고리의 다른 글

배열을 다룰 때 내가 주로 사용하는 방법  (0) 2021.05.14
this 바인딩  (0) 2021.05.12
호이스팅 (Hoisting)  (0) 2021.05.11
단축 평가 (Short-circuit Evaluation)  (0) 2021.05.11
리터럴 (Literal)  (0) 2021.05.11
댓글