자바 스크립트 엄격 모드와 일반 모드의 차이

엄격한 모드 엄격한 조건 하에서 코드 실행을 의미합니다. 당신이 머리에 "사용 엄격한"자바 스크립트 스크립트를 참조하면, 쇼는 엄격 모드 현재. 엄격한 모드는 자바 스크립트 구문의 일부 불합리한과 특수성을 제거하는 데 사용됩니다.

엄격한 모드는 주로 다음과 같은 제한이 있습니다 :

  1. 변수는 첫 번째 문 후에 사용되어야하며, 삭제할 수 없습니다, 반복 될 수 없습니다
"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. 전역 객체에이 점을 금지하는
엄격한 모드에서 정상에 thisundefined더 이상 전역 객체에 대한합니다.

function foo1(){
    return this; //返回Window对象
} 
function foo2(){ 
    "use strict";
    return this; //返回undefined
}

8. 당신은 사용할 수 없습니다 arguments.calleearguments.caller
arguments.callee그 각 재귀 호출에서 다시 작성해야하므로 종종 재귀 함수에 사용되는 주요 이유가 포기뿐만 아니라 성능에 영향을 미치는뿐만 아니라 폐쇄에 영향을 미친다. 당신은 자세한 설명을보실 수 있습니다 MDN 문서를 .
arguments.caller기능을 실행할 때 사용되는 속성 자체를 호출합니다. 버려진 이유 때문에 잠재적으로 안전하지 않은입니다.

9. 사용할 수 없습니다 fn.callerfn.arguments인수 함수 호출 스택
fn.caller, 함수 FN 글로벌 범위 호출되는 함수의 호출을 반환 fn.callernull, 다른 함수 FN 함수의 범위를 호출 할 때 fn.caller포인트를 호출 그 함수.
fn.arguments함수에 전달 대표적인 인수는 포기하고있다, 당신은 내부 기능을 사용할 수 있습니다 arguments대신 객체.
자세한 사항은 찾을 수 있습니다 MDN 문서를 .

10. 포함 예약어의 증가 public, private, protected, static, let, yield, package, interface, implements.

"use strict"명령은 스크립트 나 기능, 엄격한 ES6 모듈의에서 자동 모드의 시작 부분에 나타납니다.
에 관계없이 엄격 모드 사용 여부의 엄격 쓰기 코드에 대한 표준 모델에 따라,이 코드는보다 안전하고 안정적으로 만들 것이어야한다.

추천

출처www.cnblogs.com/yogurtq/p/11889878.html