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개의 댓글

Powered by GraphCDN, the GraphQL CDN