모던 자바스크립트 Deep Dive - 20. strict mode

둡둡·2024년 1월 25일

Modern Javascript Deep Dive

목록 보기
21/49

20.1. strict mode 란

  • 암묵적 전역: 선언되지 않은 변수를 사용할 경우 자바스크립트 엔진에서 동적으로 전역 객채로 생성함
  • strict mode (엄격 모드) : 이러한 에러 발생 등을 보완하기 위해 ES5부터 도입
  • ESLint 정적 분석 도구
    • 소스코드를 실행하기 전에 스캔하여 문법적, 잠재적 오류까지 찾아내고 리포팅해주는 도구
    • strict mode 와 동일한 기능
    • 일반적으로 사용 권장

20.2. strict mode 적용

  • 전역의 선두 또는 함수 몸체의 선두에 'use strict'; 선언
  • 코드의 선두에 위치하지 않으면 제대로 동작하지 않음

20.3. 전역 지양

  • 전역에 선언한 엄격 모드는 스크립트 단위로 적용됨
    • 다른 스크립트에는 영향을 주지 않음
    • 혼용하는 경우 오류를 발생시킬 위험이 커짐
  • 즉시 실행 함수로 스크립트 전체를 감싸서 스코프를 구분하고 선두에 strict mode 적용

20.4. 함수 단위 지양

  • 모든 함수에 일일이 적용하기엔 번거롭게 누락될 확률이 높음
  • 즉시 실행 함수로 감싼 스크립트 단위로 적용 권장

20.5. strict mode가 발생시키는 에러

20.5.1. 암묵적 전역

  • 선언하지 않은 변수 참조 시 ReferenctError 발생

20.5.2. 변수, 함수, 매개변수의 삭제

  • delete 연산자로 변수, 함수, 매개변수 삭제 시 SyntaxError 발생

20.5.3. 매개변수 이름의 중복

  • 중복 매개변수 이름 사용 시 SyntaxError 발생

20.5.4. with 문의 사용

  • with 문 사용 시 SyntaxError
  • with 문은 전달된 객체를 스코프 체인에 추가하므로 성능과 가독성에 좋지 않으므로 지양

20.6. strict mode 적용에 의한 변화

20.6.1. 일반 함수의 this

  • 함수를 일반 함수로 호출하면 this에 undefined 바인딩
  • 에러 발생하지 않음
(function () {
  'use strict';
  
  function foo () {
    console.log(this); // undefined
  }
  foo();
  
  function Foo () {
    console.log(this); // Foo
  }
  new Foo();
}());

20.6.2. arguments 객체

  • 매개변수에 전달된 인수를 재할당하여 변경해도 arguments 객체에 반영되지 않음

[출처] 모던 자바스크립트, Deep Dive

profile
괴발개발라이프

0개의 댓글