use strict 란?

김범식·2023년 6월 13일
0

Effective JavaScript

목록 보기
24/33
post-thumbnail

암묵적인 ‘느슨한 모드(sloppy mode)’ 를 해제하고,
명시적인 ‘엄격모드(strict Mode)’ 를 사용하는 방법이다.


엄격한 모드에서 사용하는 이유
  1. 기존에는 조용히 무시되던 에러들을 throwing합니다.
  2. javascritp 엔진의 최적화 작업을 어렵게 만드는 실수를 바로잡습니다.
  3. 엄격 모드는 ECMAScript의 차기 버전들에서 정의될 문법을 금지합니다.

use strict 는 자바스크립트의 의도치 않은 오류를 막아주는 수단으로 알려졌고, 또 그렇게 사용하고 있지만, 실제로 조금 다르기도 하고 사용상의 주의점도 여러가지 있습니다.




항상 그렇지만 잘 알고 사용하면 자바스크립트의 여러가지 잠재적인 오류를 막아주는데 많은 도움을 주지만 잘 못 사용하면 없더 ㄴ오류를 새로 만들어 내는 애물단지가 될 수 도 있습니다.


strict mode 적용하기


script 엄격모드

“use strict” 또는 ‘use strict’ 를 다른문구 작성 전에 삽입합니다.

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

함수에서 엄격모드

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

모듈에서 엄격모드

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



use strict 사용으로 발생하는 제약 조건들


  • 전역 변수를 허용하지 않으며, 전역 변수 선언시 오류가 발생합니다.
  • 변수 이름 선언 및 사용시 “var”가 누락되면 오류가 발생합니다.
  • 값 할당 실패는 오류가 발생합니다. (NaN = 1)
  • 삭제할 수 없는 속성을 삭제하려면 (Object.prototype 삭제) 오류가 발생합니다.
  • 읽기 전용 속성에 쓰기를 하려고 하면 오류가 발생합니다.
  • 개체 리터럴의 모든 속성 이름은 고유해야합니다. (var x = {x:1:’1’, x1:’2’})
  • 함수의 파라미터는 고유해야 합니다. (function calc(x,x) 와같은 중복이름 사용금지)
  • 8진수 구문과 8진수 이스케이프 표현 금지 (var a = 010 과 같은 8진수 표현 사용금지)
  • with 키워드 금지
  • ‘eval’,’aruments’는 예약어로 변수명으로 사용할 수 없음
  • 변수를 생성하는 eval()은 보안상 사용할 수 없습니다. ( eval(”var a = 2”) ; )
  • 변수 이름과 함수 이름 삭제 금지( var a = 1; delete a;)
  • arguments.callee 미지원, arguments.callee 속성은 이름이 없는 익명함수를 선언해서 사용할 때 실행중인 함수 안에서 함수 자신을 참조하기 위해서 사용합니다.


use strict 를 사용하는지 체크하기

전역 객체인 this와 자바스크립트 함수를 사용해서 엄격모드가 실행중인지 확인할 수 있다.

function isStrictMode(){
	return !this;
}

this는 엄격 모두에서 사용할 수 없기 때문에 this가 사용가능하면 일반모드, 엄격모드라면 !false 이기때문에 true가 반환됩니다.


use strict 를 사용한다고 더 안정적인 코드가 되지는 않는다.

‘use strict’ 는 더 엄격하게 코드 사용 규칙을 제한하고, 잠재적을 오류가 발생하라 수 있는 전역 변수 사용을 제한하기 때문에 더 좋은 코드를 작성하는데 도움을 줍니다. 그러나 어디까지 기계적인 문제들에 대해 오류를 표시해 몇가지 문제들을 피할 수 있게 해주는 것입니다.

‘use strict’가 아니어도 이런 잠재적인 대입 문제는 대부분의 경우 이후의 실행 로직에서 문제를 일으키기 때문에 오류를 확인하지 못하고 너어갈 가능성을 낮습니다. 그리고 경우에 따라서는 전역변수와 전역 this는 코드를 더 간결하고 짧게 만들어 주는데 도움이 되기도합니다.

‘use strict’사용이 비약적으로 코드의 품질을 높여주고 오류를 줄여주는 효과가 생기지는 않습니다.


이미 작성한 자바스크립에 ‘use scrict’ 를 사용하는 것은 피해야 한다.

이미작성해서 사용하고 있는 자바스크립트 파일에 ‘use strict’를 사용하는 것은 피해야 합니다. 정말 예기치 않은 문제를 발생시킬 수도 있습니다.

특히 전역 this와 전역변수를 사용하는 자바스크립트 코드는 ‘use strict’사용으로 인해 전면적인 수정을 해야할 수도 있습니다.

profile
frontend developer

0개의 댓글