엄격한 모드 엄격한 조건 하에서 코드 실행을 의미합니다. 당신이 머리에 "사용 엄격한"자바 스크립트 스크립트를 참조하면, 쇼는 엄격 모드 현재. 엄격한 모드는 자바 스크립트 구문의 일부 불합리한과 특수성을 제거하는 데 사용됩니다.
엄격한 모드는 주로 다음과 같은 제한이 있습니다 :
- 변수는 첫 번째 문 후에 사용되어야하며, 삭제할 수 없습니다, 반복 될 수 없습니다
"use strict"
a = 1; //报错 Uncaught ReferenceError: a is not defined
var b = 1;
delete b;//报错 Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
function foo(p1, p1){} //报错 Uncaught SyntaxError: Duplicate parameter name not allowed in this context
당신은 사용할 수 없습니다 2. with
문을
다음과 같이 일시적으로 범위 체인을 수정하는 데 사용되는 진술과를, 구문은 다음과 같습니다
with (Object)
statement
오브젝트를 참조 할 때 이러한 코드를 최적화하고, 또한 코드의 실행 속도를 느리게 예측할으로 곤란 폐기되기 때문에 주된 이유이다.
하지 할당 읽기 전용 특성, 당신은 속성을 삭제할 수는 없습니다 3. 삭제할 수 없습니다
var obj = {};
obj.defineProperty(obj, 'a', {value:1, writable: false});//writable=false使属性不可写
obj.a = 2; //报错 Uncaught TypeError: Cannot assign to read only property 'a' of object '#<Object>'
delete Object.prototype //报错 Uncaught TypeError: Cannot delete property 'prototype' of function Object() { [native code] }
4. 당신은 이스케이프 문자를 사용 진수 수 없습니다
var a = 010; //报错 Uncaught SyntaxError: Octal literals are not allowed in strict mode.
var a = \010; //报错 Uncaught SyntaxError: Invalid or unexpected token
5. eval
평가 호출 될 수있는 변수의 범위에서 생성 () 재 할당 될 수 없다
var eval = 1;//报错 Uncaught SyntaxError: Unexpected eval or arguments in strict mode
eval('var a = 1')
console.log(a) //报错 Uncaught ReferenceError: a is not defined
6.이 arguments
재 할당 할 수없는, 자동으로 함수 매개 변수의 변화를 반영하지 않습니다
var arguments = 1;//报错 Uncaught SyntaxError: Unexpected eval or arguments in strict mode
7. 전역 객체에이 점을 금지하는
엄격한 모드에서 정상에 this
점 undefined
더 이상 전역 객체에 대한합니다.
function foo1(){
return this; //返回Window对象
}
function foo2(){
"use strict";
return this; //返回undefined
}
8. 당신은 사용할 수 없습니다 arguments.callee
및 arguments.caller
arguments.callee
그 각 재귀 호출에서 다시 작성해야하므로 종종 재귀 함수에 사용되는 주요 이유가 포기뿐만 아니라 성능에 영향을 미치는뿐만 아니라 폐쇄에 영향을 미친다. 당신은 자세한 설명을보실 수 있습니다 MDN 문서를 .
arguments.caller
기능을 실행할 때 사용되는 속성 자체를 호출합니다. 버려진 이유 때문에 잠재적으로 안전하지 않은입니다.
9. 사용할 수 없습니다 fn.caller
및 fn.arguments
인수 함수 호출 스택
fn.caller
, 함수 FN 글로벌 범위 호출되는 함수의 호출을 반환 fn.caller
로 null
, 다른 함수 FN 함수의 범위를 호출 할 때 fn.caller
포인트를 호출 그 함수.
fn.arguments
함수에 전달 대표적인 인수는 포기하고있다, 당신은 내부 기능을 사용할 수 있습니다 arguments
대신 객체.
자세한 사항은 찾을 수 있습니다 MDN 문서를 .
10. 포함 예약어의 증가 public
, private
, protected
, static
, let
, yield
, package
, interface
, implements
.
"use strict"
명령은 스크립트 나 기능, 엄격한 ES6 모듈의에서 자동 모드의 시작 부분에 나타납니다.
에 관계없이 엄격 모드 사용 여부의 엄격 쓰기 코드에 대한 표준 모델에 따라,이 코드는보다 안전하고 안정적으로 만들 것이어야한다.