(JS) Strint Mode (엄격모드)

호두파파·2021년 2월 15일
0

호두파파 JS 스터디

목록 보기
14/27

use strict

지시자 "use strict"는 단순한 문자열처럼 생겼다. 하지만 이 지시자가 스크립트 최상단에 오면 스크립트 전체가 "모던한" 방식으로 동작한다.

"use stric"
// 이 코드는 모던한 방식으로 실행됩니다. 

엄격 모드 적용하기

"use strict"는 스크립트 최상단에 위치시켜야 한다. 그렇지 않으면 엄격모드가 활성화되지 않을 수도 있다.

alert("some code");
// 하단에 위치한 "use strict"는 스크립트 상단에 위치하지 않으므로 무시됩니다.

"use strict";

// 엄격 모드가 활성화되지 않습니다.

엄격 모드는 부분함수에도 적용가능하지만, {}괄호로 묶여진 블럭문에는 적용되지 않는다.

함수에 strict mode 적용

마찬가지로, 함수에 stric mode를 적용하기 위해, 함수 처음에 "use strict;" 구문을 넣는다.

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."; }

브라우저 콘솔에서 엄격 모드 사용하기

콘솔에서 "use strict"를 사용하려면 'use stric'를 입력한 후, shift+Enter키를 누른 후 줄을 바꿈해 스크립트를 입력하면 된다.

'use strict'; <Shift+Enter를 눌러 줄 바꿈 함>
//  ...테스트하려는 코드 입력
<Enter를 눌러 실행>

엄격 모드 특징

  • 기존에는 조용히 무시되던 에러들을 throwing합니다.
  • 엄격모드는 위 특증으로 인해 실수로 글로벌 변수를 생성하는 것을 불가능 하게 만든다.
  • JavaScipt 엔진의 최적화 작업을 어렵게 만드는 실수들을 바로잡는다. 종종 엄격 모드의 코드는 비-엄격 모드의 동일한 코드보다 더 빨리 작동하도록 만들어진다.
  • 엄격 모드는 ECMAScript의 차기 버전들에서 정의 될 문법을 금지한다.
"use strict";

// 쓸 수 없는 프로퍼티에 할당
var undefined = 5; // TypeError 발생
var Infinity = 5; // TypeError 발생

// 쓸 수 없는 프로퍼티에 할당
var obj1 = {};
Object.defineProperty(obj1, "x", { value: 42, writable: false });
obj1.x = 9; // TypeError 발생

// getter-only 프로퍼티에 할당
var obj2 = { get x() { return 17; } };
obj2.x = 5; // TypeError 발생

// 확장 불가 객체에 새 프로퍼티 할당
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = "ohai"; // TypeError 발생

❗️"use strict"의 위에는 주석만 사용할 수 있다. 더불어 "use strict"를 취소할 방법 또한 없다. 자바스크립트 엔진을 이전 방식으로 되돌리는 지시자는 존재하지 않는다.

mdn 문서 확인하기

profile
안녕하세요 주니어 프론트엔드 개발자 양윤성입니다.

0개의 댓글