최신 웹 개발 튜토리얼
 

JavaScript엄격한 사용


"use strict"; 자바 스크립트 코드는 "엄격 모드"에서 실행되어야 함을 정의합니다.


"use strict" 지침을

"use strict" 지시어는 자바 스크립트 1.8.5의 새로운 기능입니다 (ECMAScript version 5) .

그것은 문하지만, 자바 스크립트의 이전 버전에 의해 무시 리터럴 표현하지 않습니다.

의 목적 "use strict" 코드 "가 엄격 모드"에서 실행되어야한다는 것을 표시하는 것입니다.

엄격 모드를 사용하면되지, 예를 들어, 선언되지 않은 변수를 사용할 수 있습니다.

엄격한 모드가 지원됩니다 :
버전 10에서 파이어 폭스 버전 4에서 IE.
Chrome 버전 13에서 Safari 버전 5.1에서.
Opera 버전 12에서.


엄격한 모드 선언

엄격한 모드를 추가하여 선언 "use strict"; 스크립트 또는 함수의 시작 부분에.

스크립트의 시작 부분에 선언, 그것은 전역 범위 (스크립트 엄격 모드에서 실행됩니다 모든 코드)가 있습니다 :

"use strict";
x = 3.14;       // This will cause an error (x is not defined)
»그것을 자신을 시도

"use strict";
myFunction();

function myFunction() {
    y = 3.14;   // This will also cause an error (y is not defined)
}
»그것을 자신을 시도

함수 내에서 선언, 그것은 로컬 범위 (함수가 엄격한 모드에있는 내부 코드 만)가 있습니다 :

x = 3.14;       // This will not cause an error.
myFunction();

function myFunction() {
   "use strict";
    y = 3.14;   // This will cause an error (y is not defined)
}
»그것을 자신을 시도

"use strict"; 구문

구문은, 엄격 모드를 선언하기 위해, 자바 스크립트의 이전 버전과 호환되도록 설계되었습니다.

또는 리터럴 문자열, 숫자 리터럴 (4 + 5) 컴파일 ("John Doe";) 자바 스크립트 프로그램에서 아무런 부작용이 없습니다. 그것은 단순히 아닌 기존 변수로 컴파일하고 죽는다.

그래서 "use strict" ; 단지 그것의 의미를 "이해"라는 새로운 컴파일러에 문제.


왜 엄격 모드?

엄격한 모드는 쉽게 쓰기 자바 스크립트를 "보호"할 수 있습니다.

엄격한 모드 변경 이전에 실제 오류에 "나쁜 구문을"받아 들였다.

예를 들어, 일반 자바 스크립트에서 변수 이름을 잘못 입력하면 새 전역 변수를 만듭니다. 엄격 모드에서는이 불가능 실수로 전역 변수를 생성하고, 오류가 발생합니다.

일반 자바 스크립트에서, 개발자는 쓰기 가능하지 않은 속성에 값을 할당 오류 피드백을받을 수 없습니다.

엄격 모드에서, 비 쓰기 재산권에 대한 할당, 게터 전용 속성, 존재하지 않는 속성, 존재하지 않는 변수, 또는 존재하지 않는 개체는 오류가 발생합니다.


엄격 모드에서 사용할 수 없습니다

를 선언하지 않고, 변수를 사용하여 허용되지 않습니다 :

"use strict";
x = 3.14;                // This will cause an error (x is not defined)

»그것을 자신을 시도

개체가 너무 변수입니다.

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

"use strict";
x = {p1:10, p2:20};      // This will cause an error (x is not defined)

»그것을 자신을 시도

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

"use strict";
var x = 3.14;
delete x;                // This will cause an error

»그것을 자신을 시도

기능을 삭제하는 것은 허용되지 않습니다.

"use strict";
function x(p1, p2) {};
delete x;                // This will cause an error 

»그것을 자신을 시도

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

"use strict";
function x(p1, p1) {};   // This will cause an error

»그것을 자신을 시도

진수 숫자 리터럴은 허용되지 않습니다 :

"use strict";
var x = 010;             // This will cause an error

»그것을 자신을 시도

이스케이프 문자는 사용할 수 없습니다 :

"use strict";
var x = \010;            // This will cause an error

»그것을 자신을 시도

읽기 전용 속성을 작성하는 것은 허용되지 않습니다 :

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // This will cause an error

»그것을 자신을 시도

는 GET 전용 속성을 작성하는 것은 허용되지 않습니다 :

"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // This will cause an error

»그것을 자신을 시도

삭제가 속성을 삭제하는 것은 허용되지 않습니다 :

"use strict";
delete Object.prototype; // This will cause an error

»그것을 자신을 시도

문자열 "평가"는 변수로서 사용될 수 없다 :

"use strict";
var eval = 3.14;         // This will cause an error

»그것을 자신을 시도

문자열 "인자"는 변수로서 사용될 수 없다 :

"use strict";
var arguments = 3.14;    // This will cause an error

»그것을 자신을 시도

with 문은 허용되지 않습니다 :

"use strict";
with (Math){x = cos(2)}; // This will cause an error

»그것을 자신을 시도

보안상의 이유로, eval() 가 호출 된 범위에서 변수를 생성 할 수 없습니다 :

"use strict";
eval ("var x = 2");
alert (x);               // This will cause an error

»그것을 자신을 시도

같은 함수 호출에서 f() 는이 값은 전역 개체였다. 엄격 모드에서, 지금은 정의되지 않는다.


미래 증명!

미래의 예약 된 키워드는 엄격 모드에서 사용할 수 없습니다. 이것들은:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // This will cause an error

»그것을 자신을 시도


조심해!

조심해!

"use strict" 지시문은 스크립트 또는 함수의 시작 부분에 인식하고 있습니다.