TIL 27 | JS(strict mode)

YB.J·2021년 7월 6일
0
post-thumbnail

모던자바스크립트 Deep Dive에서 발췌한 strict mode에 관한 내용을 적어보자

strict mode(엄격 모드)

strict mode(엄격 모드)란?


function foo () {
  x = 10;
}

foo();
console.log(x); //
  • 암묵적 전역 : foo 함수 내에서 선언하지 않은 X 변수에 값 10을 할당 > JS는 변수 X의 선언을 스코프 체인을 통해서 검색하는데 > 변수 선언이 존재하지 않아도 암묵적으로 전역 객체에 x 프로퍼티를 동적 생성
  • 개발자의 의도와는 상관없이 암묵적 전역이 발생하면 오류가 날 가능성이 있다
  • 그래서 ES5부터는 strict mode(엄격 모드)가 추가 : strict mode는 JS 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 JS 엔진 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킴

ESLint
ESLint와 같은 도구를 사용해도 strict mode와 유사한 효과를 얻을 수 있다. 린트 도구는 정적 분석 기능을 통해 소스코드를 실행하기 전에 소스코드를 스캔하여 문법적 오류 뿐 아니라 잠재적인 오류까지 찾아내고 오류의 원인을 리포팅 해주는 도구이다

strict mode의 적용

  • strict mode를 적용하기 위해서는 전역의 선두 또는 함수 몸체의 선두에 'use strict';를 추가한다
  • 전역의 선두에 추가하면 스크립트 전체에 strict mode가 적용된다
  • 함수 몸체의 선두에 추가하면 해당 함수와 중첩 함수에 strict mode가 적용된다
  • 코드의 선두에 'use strict';을 위치시키지 않으면 strict mode가 제대로 동작하지 않는다
'use strict';

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

foo();

전역에 strict mode를 적용하는 것은 피하자

  • 전역에 적용한 strict mode는 스크립트 단위로 적용된다
  • 스크립트 단위로 적용된 엄격 모드는 다른 스크립트에 영향을 주지 않고 해당 스크립트에 한정되어 적용된다

함수 단위로 strict mode를 적용하는 것도 피하자

  • 어떤 함수는 엄격모드를 적용하도 다른 함수는 적용하지 않는 것은 바람직하지 않으며 모든 함수에 일일이 엄격 모드를 적용하는 것은 번거로움
  • 엄격 모드가 적용된 함수가 참조할 함수 외부의 컨텍스트에 엄격 모드를 적용하지 않으면 문제가 됨
  • 엄격 모드는 즉시 실행 함수로 감싼 스크립트 단위로 적용하는 것이 바람직
profile
♪(^∇^*) 워-후!!(^∀^*)ノシ

0개의 댓글