[JS] 엄격모드의 기능은?

hahaha·2021년 8월 9일
0

JavaScript

목록 보기
8/24
post-thumbnail

Strict mode(엄격 모드) 란?

  • 문법을 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생 시킴
  • ESLint와 같은 린트 도구를 사용해도 유사한 효과 발생
  • ES6에서 도입된 클래스와 모듈은 기본적으로 적용
  • 'use strict;' 명령어로 사용

ESLint

  • 정적 분석 기능
  • 소스코드 실행 전, 문법적 / 잠재적 오류 찾아냄
  • 오류의 원인을 알려줌

적용 방법

  • 전역의 선두 또는 함수 몸체의 선두use strict; 추가
  • 코드의 선두에 위치시키지 않을 경우 제대로 작동 불가
  • 스크립트 단위로 적용됨
  • 즉시 실행 함수로 감싼 스크립트 단위로 적용하는 것이 바람직함

적용 효과

- 암묵적 전역 방지

  • 선연하지 않은 변수를 참조하면 ReferenceError 발생

    암묵적 전역

    선언하지 않은 변수를 참조할 경우,
    암묵적으로 전역 객체에 프로퍼티를 동적으로 생성하는 것

function foo() {
  'use strict';
  
  x = 10; // ReferenceError: x is not defined
}
foo();

- 변수, 함수, 매개변수의 삭제 방지

  • delete 연산자로 변수, 함수, 매개변수를 삭제하면 SyntaxError 발생
(function() {
  'use strict';
  
  var x = 1;
  delete x; // SyntaxError: Delete of an unqualified indentifier in strict mode.
}());

- 매개변수 이름의 중복 방지

  • 중복된 매개변수 이름을 사용하면 SyntaxError 발생

- with문 사용 금지

  • with문을 사용할 경우 SyntaxError 발생

- 일반 함수의 this 값 -> undefined

  • 일반 함수 내의 this에 undefined가 바인딩된다.
(function() {
  'use strict';
  
  function foo() {
    console.log(this);	// undefined
  }
  foo();
  
  function Foo() {
    console.log(this);	// Foo
  }
  new Foo();
}());

- arguments 객체 반영 불가

  • 매개변수에 전달된 인수를 재할당해도 arguments 객체에 반영되지 않는다.
profile
junior backend-developer 👶💻

0개의 댓글