자바스크립트 Use Strict

"use strict";는 자바스크립트 코드가 “strict mode”에서 실행되게 정의합니다.


“use strict” 지침(Directive)

“use strict” 지침은 자바스크립트 1.8.5(ECMAScript 버전 5)의 새로운 기능입니다.

이것은 문(a statement)이 아니고, 리터럴 표현식(a literal expression)이며 이전 버전의 자바스크립트에서는 무시됩니다

“use strict”는 코드를 “strict mode”로 실행하도록 지시합니다.

“strict mode”에서는 선언되지 않은 변수(undeclared variables)는 사용할 수 없습니다.


Strict Mode 선언

Strict mode는 스크립트 또는 함수의 시작 부분에 use strict;를 추가하면 선언됩니다.

스크립트 시작 부분에 선언되면 전역 범위(global scope)에 적용됩니다 (스크립트의 모든 코드가 strict mode로 실행됩니다):

Example

“use strict” 사용:

선언되지 않은 변수 사용은 허용되지 않습니다.

오류 보고서를 보려면 브라우저 (F12) 버튼으로 디버깅(debugging)을 활성화하십시오.

Example

Global “use strict” 선언.

오류 보고서를 보려면 브라우저 (F12) 버튼으로 디버깅(debugging)을 활성화하십시오.

함수 안에서 선언하면 지역범위(local scope)에 적용됩니다(함수 내의 코드 만 strict mode가 적용됩니다):

함수 내에 “use strict”는 그 함수 내에서 만 오류가 발생합니다.

오류 보고서를 보려면 브라우저 (F12) 버튼으로 디버깅(debugging)을 활성화하십시오.


“use strict”; 구문

엄격 모드 선언을 위한 구문은 이전 버전의 자바스크립트와 호환되도록 설계되었습니다.

자바스크립트 프로그램에서 숫자 리터럴 (4 + 5;) 또는 문자열 리터럴 (“John Doe”;)을 컴파일하면 부작용이 없습니다. 단순히 존재하지 않는 변수(a non existing variable)로 컴파일되고 종료됩니다(dies).

그래서 “use strict”;는, 그것의 의미를 “이해(understand)”하는, 새로운 컴파일러(new compilers)에만 중요합니다.


왜 Strict Mode입니까?

Strict mode를 사용하면 “안전한(secure)” 자바스크립트를 더 쉽게 작성할 수 있습니다.

Strict mode는 이전에는 허용되었던 “잘못된 구문(bad syntax)”을 실질적인 오류로 변경합니다.

예를 들어, 일반적인 자바스크립트에서는 변수 이름을 잘못 입력하면 새로운 전역 변수가 만들어집니다. strict mode에서는, 실수로 전역 변수를 만들 수 없으므로, 오류가 발생합니다.

일반적인 JavaScript에서는 개발자가 쓰기 권한이없는 속성에 값을 할당하는 오류 피드백을받지 못합니다.In normal JavaScript, a developer will not receive any error feedback assigning values to non-writable properties.

strict mode에서, 쓰기 권한이 없는 속성(a non-writable property), 가져 오기 전용 속성(a getter-only property), 존재하지 않는 속성(a non-existing property), 존재하지 않는 변수(a non-existing variable) 또는 존재하지 않는 객체(a non-existing object)에 대한 할당은, 오류를 발생시킵니다.


Strict Mode에서 허용되지 않음

변수를 선언하지 않고 사용하는 것은 허용되지 않습니다:

객체를 선언하지 않고 사용하는 것은 허용되지 않습니다:

변수 (또는 객체) 삭제는 허용되지 않습니다.

함수 삭제는 허용되지 않습니다:

매개 변수 이름(a parameter name)을 복제하는 것은 허용되지 않습니다:

8진수 숫자 리터럴(Octal numeric literals)은 허용되지 않습니다:

8진수 이스케이프 문자(Octal escape characters)는 허용되지 않습니다:

읽기 전용 속성(a read-only property)에 쓰는 것은 허용되지 않습니다:

get 전용 속성(a get-only property)에 쓰는 것은 허용되지 않습니다:

삭제할 수 없는 속성(an undeletable property) 삭제는 허용되지 않습니다:

문자열 “eval”은 변수로 사용할 수 없습니다:

문자열 “arguments”는 변수로 사용할 수 없습니다:

with 문은 사용할 수 없습니다:

보안상의 이유로 eval()은 호출된 범위에서 변수를 만들 수 없습니다:

f()와 같은 함수 호출에서, 이 값은 전역 객체였습니다. strict mode에서는 이제 undefined입니다.


Future Proof!

향후 예약 키워드(Future reserved keywords)는 strict mode에서 허용되지 않습니다:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield

출처: JavaScript Use Strict

답글 남기기