자세한 자바 스크립트 엄격 모드 (차례)

I. 개요

: 정상 작동 모드에 더하여, ECMA 스크립트 (5)는 동작의 제 2 모드에 추가 "엄격 모드" (엄격 모드). 이름에서 알 수 있듯이,이 모드는 자바 스크립트 더 엄격한 조건에서 실행 할 수 있습니다.

주로 다음의 "엄격 모드"의 목적 :

  • - 기괴한 행동의 일부를 감소, 일부 불합리한 자바 스크립트 구문, 엄격한없는 장소를 제거;
  • - 코드의 안전한 작동을 보장하기 위해, 불안 코드 실행의 일부를 제거;
  • - 동작 속도를 증가, 컴파일러 효율을 향상;
  •   - 자바 스크립트의 새 버전의 미래를위한 방법을 포장.

"엄격 모드는"자바 스크립트가 이미 안전하고, 더 합리적이고 더 엄격한 개발, 주요 브라우저를 포함하여, IE (10)을 포함입니다 반영 지원 많은 대형 프로젝트를 포용하기 시작했다 그것을.

반면에, "엄격 모드"에서 동일한 코드가 다른 운영 결과가있을 수있다 "정상적인 모드"의 일부는 "엄격 모드"에서, 문을 실행하는 실행되지 않습니다. 당신이 더 나은 프로그래머가 될 수 있도록, 자바 스크립트에 대한 자세한 깊은 이해에 기여 내용을 마스터.

이 논문은 "엄격 모드"는 자세한 소개를 할 것입니다.

둘째, 항목 플래그

"엄격 모드"플래그를 입력 한 다음 줄의 문장은 다음과 같습니다

"엄격한 사용";

일반 캐릭터 라인으로 사용하는 브라우저의 이전 버전은 무시한다.

셋째, 방법을 호출

"엄격한 모드"다른 경우에 적합한 호출하는 방법의 두 가지 방법이 있습니다.

전체 스크립트 파일 3.1

스크립트 파일에 "엄격한 사용"할 첫 번째 라인은, 전체 스크립트는 "엄격 모드"가됩니다. 이 라인은 문장의 첫 번째 줄 수없는 경우, "정상 모드"로 전체 스크립트 유효 할 것이다. 하나 개의 파일에 코드 파일의 다른 모드 경우에는 특별한주의가 필요합니다.

(엄격히 다시 직접 빈 세미콜론으로, "엄격한 사용"첫번째 행하지 않을 수없는 실제의 동작의 결과 상기 문만큼 생성 말하자면).

<스크립트>
    "엄격한 사용" ; 
    CONSOLE.LOG를 ( "이것은 엄격 모드입니다." );
 </ script> 
<script> 
    CONSOLE.LOG ( "이것은 정상 모드입니다." );
 </ script>

위의 코드는 페이지가 순차적으로 두 개의 섹션 자바 스크립트 코드가 나타냅니다. 스크립트 태그가 엄격 모드가되기 전에, 후자는 없습니다.

단일 함수 3.2

다음은 함수의 본문의 첫 번째 줄에 "엄격한 사용"전체 기능에 실행 "엄격 모드."

함수 () {엄격한
    "엄격한 사용" ;
     반환 "엄격 모드 무엇입니까." ; 
  } 
기능 notStrict () {
    반환 "이것은 정상 모드입니다." ; 
}

스크립트 파일의 3.3 유연한 표현

첫 번째 호출 방법은 더 나은 방법은 두 번째 방법, 즉시 실행에 익명 함수의 전체 스크립트 파일을 빌려 그래서, 파일을 병합하는 데 도움이 아니기 때문에.

( 함수 () {
     "엄격한 사용" ;
    // 일부 코드를 여기 
}) ();

넷째, 구문 및 행동 변화

엄격한 모드 자바 스크립트 구문과 행동, 우리는 약간의 변화를 만들었습니다.

4.1 전역 변수는 명시 적으로 선언

변수가 값을 선언하지 않은 경우 일반 모드에서는, 디폴트는 글로벌 변수입니다. 엄밀히 같은 사용 패턴을 금지하고, 글로벌 변수는 명시 적으로 선언해야합니다.

    "엄격한 사용" ; 
     V의 = 1]. // 에러, V가 선언되지 
     위해 (I = 0; I <2, I는 ++) { // 에러가 난 미표시 
     }

따라서, 엄격 모드는, 모든 변수는 사용하기 전에 VAR 명령으로 선언해야합니다.

4.2 정적 바인딩

자바 스크립트 언어의 특징, 객체, 컴파일 타임에 결정되지 속한 결국 프로퍼티와 메소드의 일부하지만, 런타임시 (런타임) 결정하는 것이 "동적 바인딩"허용하는 것입니다.

동적에 대한 엄격한 모드는 몇 가지 제한을 만든 바인딩. 어떤 경우에는 정적 바인딩 할 수 있습니다. 즉, 속성 및 속성의 방법, 그것을 컴파일 시간에 결정된다 반대 단부에있다. 이렇게하면 코딩 효율을 향상시킬뿐만 아니라, 읽고 덜 사고에 코드 쉽게됩니다.

특히, 다음과 같은 측면에.

(1) 문의 사용을 금지

결국 소유권 개체 속성 컴파일시에 확인할 수 없습니다 문을 가진 때문입니다.

"엄격한 사용" ,
 VAR의 V를 = 1. ]
  (O) { // 구문 오류 
    V = 2 ; 
}

평가 범위 (2)의 작성

글로벌 범위와 기능 범위 : 일반 모드, 자바 스크립트 언어에서 두 변수 범위 (범위)이있다. 제 엄격 모드 범위의 생성 : 평가 범위.

정상 모드에서, 범위 평가 문이 전역에, 또는 기능의 범위에 있는지 여부에 따라. 엄격 모드에서 평가 문은 더 이상 전역 변수를 생성 할 수있는 범위 자체가 없다, 그것은 변수가 단지 내부 평가에 사용할 수 있습니다 생성합니다.

"엄격한 사용" ;
VAR의 X = 2 ; 
console.info (평가 ( "VAR X = 5; X")); // 5 
console.info (X); // 2

4.3 향상된 보안 조치

(1)이 키워드는 전역 객체를 참조 금지

함수 F가 () {
    반환 ! 다음은이 ; 
} 
  // false를 반환 "이"전역 개체 점 때문에! "이"거짓이다 
기능 F () {
     "엄격한 사용" ;
    반환 ! 다음은이를 ; 
} 
 // 때문에, true를 돌려줍니다 엄격 모드에서,이 값은 사실 "이!"정의되지 않은, 그래서.

생성자를 사용하는 경우 새로운 추가 잊어 버린 경우 따라서, 이것은 더 이상 전역 객체하지만 주어진 없습니다.

함수 F () {
     "엄격한 사용" ;
    이 본 II.A = 1. ; 
}; 
F (); // 에러이 정의되지

(2) 호출 스택을 통과하는 내부 기능을 금지

 함수 F1 () {
     "엄격한 사용" ; 
    f1.caller; // 에러 
    f1.arguments; // 오류 
  } 
F1 ();

4.4 금지 삭제 변수

당신은 변수를 엄격 모드를 삭제할 수 없습니다. 진정한 개체 특성에 만 구성 세트는 삭제 될 수 있습니다.

   "엄격한 사용" ;
  var에 X를,
  삭제 X를; // 구문 오류 
  var에 O는 = Object.create는 ( 널 (null) , 'X'는 , { 
      값 : 1. , 
      구성은 : true로 
  }); 
  삭제 OX; // 성공적으로 삭제

4.5 명시 에러

일반 모드에서, 객체 할당의 읽기 전용 속성, 그냥 자동으로 실패, 불평하지 않습니다. 엄격 모드에서 오류.

 "엄격한 사용" ;
  VAR의 O = {}; 
  Object.defineProperty (O, "V", {값 : 1 쓰기 : 거짓 }); 
  OV = 2; // 报错

엄격 모드에서, 할당의 getter 메소드를 사용하여 속성을 읽고, 그것을 불평 할 것이다.

   "엄격한 사용" ;
  var에 O는 = { 
    V를 얻을 수 () { 반환 1 ; } 
  }; 
  OV = 2; // 报错

엄격 모드에서 확장 된 객체 금지에 새로운 속성을 추가, 불평 할 것이다.

   "엄격한 사용" ;
  VAR의 O = {}; 
  Object.preventExtensions (O); 
  OV = 1; // 报错

엄격 모드에서는, 속성은 삭제할 수 없습니다 오류를 삭제합니다.

  "엄격한 사용" ;
  삭제 Object.prototype에를; // 报错

4.6 동일한 이름 오류

엄격한 모드는 약간의 문법 오류를 추가했다.

(1) 같은 이름의 속성 객체를 가질 수 없습니다

객체가 같은 이름의 여러 속성이있는 경우 일반 모드에서, 마지막 할당이 이전 값을 덮어 씌 웁니다 속성. 구문 오류가 엄격 모드에서는.

   "엄격한 사용" ,
  VAR의 O = { 
    P : 1. , 
    P : 2 
  } // 구문 오류

(2) 함수 파라미터의 이름과 동일 할 수 없습니다

정상 모드, 동일한 이름의 복수의 기능의 파라미터를 인수로 읽을 수있는 경우 [I]. 구문 오류가 엄격 모드에서는.

      "엄격한 사용" ,
      함수 F (A, A, B) { // 구문 오류 
        반환 ; 
      }

47 진수 표기를 금지

정상 모드에서, 상기 제 1 비트 정수 0 인 경우,이 64 진수로 0100과 같은 동일한 8 진수라는 것을 나타낸다. 엄격 모드는 표현을 금지 제 정수 제로 에러이다.

      "엄격한 사용" ;
      var에 N- = 0100; // 구문 오류

4.8 arguments 객체 제한

인수는 인수 기능을 객체이며, 엄격 모드 사용을 제한하고있다.

(1) 인수의 할당을 허용하지 않습니다

      "엄격한 사용" ; 
      인수 ++; // 구문 오류 
      var에 OBJ의 SET = {P (인수) {}}; // 구문 오류 
      은 try {} 캐치 (인수) {} // 구문 오류 
      함수 인수 () {} / / 구문 오류 
      var에 F = 새로운 새로운 기능 ( "인수", " '엄격한 사용';. 반환 17;"); // 구문 오류

(2) 인수는 더 이상 매개 변수 변경 사항을 추적하지

      함수 F (A) { = 2 ;
        리턴 [A, 인수 [0 ]; 
      } 
      F ( 1.); // 정상 모드의 [2,2] 
      함수 F (A) {
         "엄격한 사용" ; = 2 ;
        리턴 [A, 인수 [0 ]을; 
      } 
      F를 ( 1.); // 엄격 모드는 [2,1]이다

(3) arguments.callee를 사용 금지

이것은 당신이 내부 익명 함수 자체를 호출 할 수 있다는 것을 의미한다.

      "엄격한 사용" ;
      VAR의 F = 함수 () { 복귀 arguments.callee와; }; 
      에프(); // 报错

4.9 기능은 최상위 수준에 선언해야합니다

미래는 자바 스크립트의 새 버전을 소개합니다 "블록 레벨 범위를." 새 버전에 통합하기 위해, 엄격한 모드는 전역 또는 함수 범위 내에서 최상위 함수 선언을 할 수 있습니다. 즉 비 차단 기능의 함수를 선언 할 수 없다.

      "엄격한 사용" ;
      IF ( true로를 ) {
        함수 F () {} // 구문 오류 
      }
       ( VAR의 I = 0; I는 <5]. 난 ++ ) {
        함수 F2 () {} // 구문 오류 
      }

4.10 예약어

자바 스크립트 미래의 새 버전으로 전환하기 위해, 엄격 모드는 일부 예약 된 단어를 추가 : 구현은, 인터페이스,하자, 패키지, 개인, 보호, 공공, 정적, 수율.

변수 이름으로이 말을 사용하는 것은 발생합니다.

기능 패키지 (보호) { // 구문 오류 
    "엄격한 사용" ;
     var에 구현; // 구문 오류 
}

또한, ECMA 스크립트 5 판 자체가 다른 예약어 (클래스, 열거, 수출, 확장, 수입, 슈퍼)의 번호를 제공하고, 자신의 브라우저 CONST의 주요 증가는 단어를 예약뿐만 아니라 변수 이름으로 사용할 수 없습니다.

다섯째, 참조 링크

- MDN은 엄격한 모드
- 박사 악셀 Rauschmayer, 자바 스크립트의 엄격한 모드 : 요약
- 더글러스 크록 포드는 엄격 모드는 도시에오고있다

(끝)

http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html :에서 재판

HTTPS : //www.cnblogs.com/JoannaQ/p/3779159.html 재현

추천

출처blog.csdn.net/weixin_34301307/article/details/93057402