"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";
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" 지시문은 스크립트 또는 함수의 시작 부분에 인식하고 있습니다.