strict mode

어승준·2023년 10월 9일

JS 스터디

목록 보기
7/26
post-thumbnail

📌 strict mode를 사용하려고 할 때 스크립트와 함수에서 어떻게 선언해줘야 할까요? 그리고 클래스와 모듈은 왜 use strict를 선언하지 않아도 될까요?

  • "use strict";를 스크립트 파일 및 함수 내부 최상단에 선언
  • 클래스: ES6에서 도입된 클래스는 기본적으로 strict mode를 사용합니다. 클래스 정의 내부의 메서드와 생성자는 strict mode에서 실행되는 것처럼 처리됩니다. 따라서 클래스 정의 내에서 추가적으로 use strict를 선언할 필요가 없습니다.
  • 모듈: ES6 모듈은 기본적으로 strict mode에서 동작합니다. 모듈 파일의 최상위 수준에서 코드를 작성하면 그 코드는 자동으로 strict mode에서 실행됩니다. 따라서 모듈 파일에서 추가적으로 use strict를 선언할 필요가 없습니다.

📌 변수, 프로퍼티, 함수, 매개변수, 문자열, this의 strict mode를 각각 최소 1개씩 말해보세요

  • 변수
    • 선언되지 않은 변수나 객체를 사용할 수 없음.
    • eval() 함수 내에서 선언된 변수는 외부에서 사용할 수 없음.
  • 프로퍼티
    • 읽기 전용 프로퍼티에는 대입할 수 없음.
    • 한 프로퍼티를 여러 번 정의할 수 없음.
  • 함수
    • 함수를 구문이나 블록 내에서 선언할 수 없음.
  • 매개변수
    • 매개변수의 이름이 중복되어서는 안됨.
    • arguments 객체의 요소 값을 변경할 수 없음.
  • 문자열
    • 문자열 "eval"과 "arguments"는 사용할 수 없음.
  • this
    • this 포인터가 가르키는 값이 null이나 undefined인 경우 전역 객체로 변환되지 않음.

📌 strict mode를 사용할 때 주의해야 할 사항은 무엇인가요?

  • 전역 또는 함수 단위에 strict mode 적용 피하기
    • none-strict mode인 스크립트 또는 함수를 혼용할 경우 에러 발생 가능
  • 선언 위치 알맞게 선언

📌 strict mode나 린트 도구 등을 사용하는 이유는 무엇인가요?

  • strict mode는 자바스크립트 언어의 문법을 보다 엄격히 적용하여 기존에는 무시되던 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킨다.

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


📌 strict mode에서는 기존에 무시되던 에러들이 throwing됩니다. 그 예시 두 가지를 말해 주세요.

  • 암묵적인 전역 변수 선언
  • 삭제할 수 없는 변수를 삭제하려고 시도
profile
鈍筆勝聰(둔필승총) : '둔한 붓이 총명함을 이긴다' (서툴더라도 기록으로 남기는 것이 사람의 기억보다 훨씬 오래 보전된다) - 정약용

0개의 댓글