엄격모드(Strict mode)

Parker.Park·2022년 7월 25일
0

개념

목록 보기
5/16

엄격모드(Strict mode)

이 글은 지난 this와 바인딩?에서 다른 내용들이 많아 추출하여 쓴 글이다.

엄격모드는 ECMAScript 5에서 소개된 JavaScript의 엄격모드라고 한다. 엄격모드를 지원하지 않는 브라우저에서는 엄격모드의 코드가 다른 방식으로 동작할 것이라고 한다. 그렇기 때문에 사용에 주의해야 한다고 한다.
엄격모드는 평범한 JavaScript 시멘틱스(기능들?)에 몇 가지 변경이 일어난다고 한다. 몇가지 정리해 보자.

조용히 무시되던 에러들이 throwing 한다고 한다.

  1. JavaScript 엔진의 최적화 작업을 어렵게 하는 실수들을 바로 잡는다고 한다.
  2. 엄격 모드는 ECMAScript 차기 버전들에서 정의 될 문법을 금지한다고 한다.

엄격모드는 전체스크립트 또는 부분 함수에 적용이 가능하다고 한다. 단, {}중괄호로 묶여진 블럭문에는 적용되지 않는다고 한다.

다음은 엄격 모드 적용의 한 예이다.

//use strict mode 
'use strict';
var v = "Hi!  I'm a strict mode script!";
// 이 구문이 유명하다고하는 이유는 모르겠다 ㅠㅠ. 다만 다음과 같은 전역객체에 제한이 되었다.
console.log(this.v) //undefined

//use sloppy mode?
var v = "Hi!  I'm a strict mode script!";
console.log(this.v) //"Hi!  I'm a strict mode script!"

엄격모드 시 적용되는 것들이 많지만 중요하다고 생각하는 몇 가지만 짚고 넘어가자.

  • 전역 변수 선언이 제한된다.
'use strict';
a = 1; //ReferenceError: a is not defined
  • undefined, NaN 와 같은 프로퍼티(?)를 변수를 선언할 때도 에러가 발생한다고 하는데, ES6부터는 에러가 아니라고 하는데 정확하지는 않다.(bug 1041128이라고...)

  • 유니크한 파라미터 이름을 요구한다고 한다. 일반 코드에서는 마지막으로 중복된 인수가 이전에 지정된 인수를 숨긴다고 한다. 사실 arguments[i]를 통해서 접근할 수 있다고 하는데 이건 나중에 다룰수 있으면 다루도록 하겠다. ㅠ

function aa(c,c,d){
  return c + d
}

aa(1,2,3) //5

//use strict mode
function aa(c,c,d){
  'use strict'  // SyntaxError: Argument name clash.
  return c + d
}
  • 엄격모드에서 this로 함수에 전달된 값은 강제로 객체가 되지 않는다고 한다.
    엄격 모드는 기능상으로 제한하기도 하지만, 브라우저 사용시 보안상으로 전역객체(window)를 사용 할 수 없다고 한다.
function fun(){
  return this
}

fun() === this // true

//use strict mode
'use strict'

function fun(){
  return this
}

console.log(fun()) //undefined

참조

[Strict mode, MDN, 2022년06월17일 접속]
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Strict_mode

profile
개발자준비중

0개의 댓글