CS/프로그래밍

use strict, undeclared

H.E 2023. 11. 1. 22:19

[ use strict(엄격모드) ]

ES5부터 지원하는 use strict는

암묵적인 "느슨한 모드(Sloppy Mode)"를 해제하고 명시적인 "엄격 모드(Strict Mode)"를 사용하는 방법

 

JS의 제한된 버전을 선택함으로써 런타임시 JS 코드에 대하여 향후 버전의 ECMAScript에서 사용될 수 있는 일부 구문을 제외하는 등보다 엄격한 parsing  error handling을 자발적으로 시행하도록 적용함으로써 일반적인 코딩 실수나 안전하지 않은 동작을 포착함

 

strict 모드에서는 일반적인 JS의 의미에 몇가지를 변경함

  1. JS오류는 아니지만 함정이 될 어떤 일을 오류가 발생하도록 변경하여 제거
    • 코드의 문제를 더 빨리 알리고 소스로 더 빨리 안내하므로 결과적으로 디버깅이 쉬워짐
  2. JS 엔진의 최적화 처리를 어렵게 만드는 오류를 수정함
  3. 미래의 ECMAScript로 정의 될 예정 구문을 금지하여 발생 가능한 에러를 예방함

 

strict mode가 적용되는 사항(JS의 기본 동작이 변경되는 사항)

  1. 암묵적인 전역 변수 금지
    • 변수를 선언하지 않고 사용하는 것을 금지하여 전역 오염을 방지 할 수 있음
  2. 변수, 함수, 매개변수에 중복된 이름 금지
    • 중복된 이름을 가진 변수, 함수, 매개변수의 선언을 금지함
  3. 수정할 수 없는 객체에 대한 수정 금지
    • 확장 및 삭제가 금지된 객체에 대한 수정을 시도하면 오류 발생
  4. this의 값 설정
    • 함수 내에서 this의 값이 전역 객체를 참조하지 않고 undefined가 됨
  5. with문 금지
    • with문을 사용하는 것을 금지함

 

strict mode(엄격모드) 적용하기

use strict는 전체 스크립트 또는 부분함수에 적용 가능함

 { } 괄호로 묶어진 블록문에서는 적용되지 않음 즉 컨텍스트와 같은 곳에 적용을 시도하면 동작하지 않음

 

전체 스크립트에 strict mode 적용

// 전체 스크립트 엄격 모드 구문
"use strict";
var v = "Hi!  I'm a strict mode script!";

 

 

함수에 strict mode 적용

function strict() {
  // 함수-레벨 strict mode 문법
  "use strict";
  function nested() {
    return "And so am I!";
  }
  return "Hi!  I'm a strict mode function!  " + nested();
}
function notStrict() {
  return "I'm not strict.";
}

함수에 strict mode를 적용하기 위해 함수 본문 처음에 "use strict";('use strict';) 구문을 넣음

 

모듈에 strict mode 적용

function strict() {
  // 모듈이기때문에 기본적으로 엄격합니다
}
export default strict;

JS 모듈의 전체 컨텐츠는 엄격 모드 시작을 위한 구문 없이도 자동으로 엄격모드 상태임

 

strict mode의 장점

  1. 오류 감지
    • strict mode는 일부 애매한 코드의 동작을 변경하여 오류를 발생시킴
    • 이로 인해 오류를 더 빨리 감지하고 조치를 취할 수 있음
  2. 전역 변수 오염 방지
    • strict mode에서 전역 변수를 선언하고 사용하는 것을 금지함
    • 이로 인해 다른 코드에 의해 전역 변수가 무분별하게 변경되는 것을 방지할 수 있음
  3. 성능 최적화
    • strict mode에는 몇 가지 코드 최적화 기능이 내장되어 있음
    • 이로 인해 코드 실행 속도가 향상될 수 있음

 

strict mode의 단점

  1. 일부 기능 제한
    • strict mode에서는 with 문을 사용할 수 없는 등 일부 기능을 사용할 수 없음
    • 이는 기존의 코드와의 호환성 문제를 일으킬 수 있음
  2. 예전 브라우저 호환성
    • strict mode는 ECMAScript 5에서 소개된 기능이므로 예전 버전의 브라우저에서는 동작하지 않을 수 있음
    • 이는 호환성 문제를 처리해야 할 때 추가 작업을 필요로 함

 

[ undeclared ]

undeclared는 스코프 내에 변수가 선언조차 되지 않았을 때를 말함

 접근 가능한 스코프에 변수 선언조차 되어 있지 않은 상태를 뜻함

 

undefined vs null vs undeclared

undefined 개발자가 의도적으로 할당한 값이 아니라 자바스크립트 엔진에 의해 초기화된 값

값이 없는 게 아니라 값이 할당된 적이 없다는 뜻

 

null 의도적으로 변수에 값이 없다는 것을 명시할 때 사용

 

undeclared 접근 가능한 스코프에 변수 선언조차 되어 있지 않은 상태

 

null 비교

null을 비교할때는 엄격한 비교 연산자(===)를 사용하는 것이 좋음

typeof를 사용하거나 느슨한 비교를 할경우 원하는 비교 혹은 확인 불가능

typeof null	//'object'
null == undefined	//true

null === undefined	//false

 

 

'CS > 프로그래밍' 카테고리의 다른 글

원시 값과 참조 값  (0) 2023.11.03
웹팩과 바벨  (0) 2023.11.02
탐색 알고리즘  (1) 2023.10.13
정렬 알고리즘  (0) 2023.10.13
링크드리스트(연결 리스트)와 배열  (2) 2023.10.11