>  기사  >  웹 프론트엔드  >  JS 엄격 모드를 자세히 설명하는 지식 포인트는 무엇입니까?

JS 엄격 모드를 자세히 설명하는 지식 포인트는 무엇입니까?

亚连
亚连원래의
2018-06-04 11:17:121508검색

이 글은 모두를 위해 JS 엄격 모드에서 관련 지식 포인트와 코드 예제를 정리했습니다. 관심이 있다면 함께 배워보세요.

소위 엄격 모드는 실제로 어떤 변수에도 할당되지 않는 "use strict" 문자열입니다.

이 프롬프트가 전역 범위에 제공되면 전체 스크립트가 엄격 모드를 사용합니다. 함수에서만 엄격 모드를 켤 수도 있습니다

1. 엄격 모드에는 전역 변수가 없습니다

a="test"

엄격 모드에서는 오류가 보고되지만 비엄격 모드에서는 정상입니다.

2. 변수 삭제

var에는 세 가지 선언 상황이 있습니다

  • var가 전역 변수를 선언했습니다.

  • var가 지역 변수를 선언했습니다.

  • eval() eval()에 선언된 전역 변수

첫 번째와 두 번째 경우는 삭제를 이용하여 삭제할 수 없습니다.

첫 번째 경우에 선언된 전역 개체는 Windows의 속성이지만 이 속성은 configurable=false이므로 삭제할 수 없습니다.

두 번째 경우의 로컬 변수는 더욱 좋지 않습니다. 첨부된 객체가 누구인지, 어떻게 삭제하는지 알 수 있습니다.

eval()의 세 번째 경우는 나중에 논의하겠습니다.

주제로 돌아갑니다. 즉, 비엄격 모드에서는 변수를 삭제할 수 있지만 실패하고 false를 반환합니다.

엄격 모드에서 변수를 삭제하면 오류가 보고됩니다.

3. 개체

다음 상황에서는 개체를 작동할 때 오류가 보고됩니다.

  1. 읽기 전용 속성에 값을 할당하면 오류가 보고됩니다

  2. 구성 가능한 속성은 오류를 보고합니다

  3. 확장할 수 없는 객체입니다. 속성을 추가하면 오류가 보고됩니다

  4. 객체 리터럴을 사용할 때 속성 이름은 고유해야 합니다. 예를 들어

var person={
  name:"1",
  name:"2"
}

는 비엄격 모드에서 두 번째 값이 기본값으로 설정되고, 엄격 모드에서는 오류가 보고됩니다.

4. 함수

엄격 모드에서는 함수 매개변수 이름이 고유해야 합니다.

function(n,n){
  // todo
}

비엄격 모드에서는 이 함수 선언이 매개변수 이름을 통해 두 번째 매개변수에만 액세스할 수 있습니다. 첫 번째 매개변수는 인수를 통한 액세스입니다.

두 모드의 인수도 다릅니다.

비엄격 모드에서는 명명된 매개변수의 값을 수정하면 인수 객체에 반영되지만, 엄격 모드에서는 두 값이 독립적입니다.

args.callee(함수 자체 참조) 및args.caller(호출 함수 참조)를 제거합니다.

엄격 모드에서는 함수 이름에 js 예약어를 사용할 수 없습니다.

** 엄격 모드에서는 함수는 스크립트의 최상위 수준과 함수 내부에서만 선언할 수 있습니다. if 문에서 함수를 선언하면 구문 오류가 발생합니다. . **

if(true){
  function(){
   // 严格模式下报错
}
}

5.this

비엄격 모드에서 apply(), call() 함수를 사용할 때 전달된 null 또는 정의되지 않은 값은 전역 개체로 변환됩니다. 엄격 모드에서 함수의 this는 지정된 값에 관계없이 항상 지정된 값입니다.

var a="1";
function test(){
 console.log(this.a)
}
test.call(null) 在非严格模式下会输出1,严格模式下this就指代的就是null,null没有a属性,就会报错。

위 내용은 모두를 위해 제가 정리한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.

관련 기사:

vue를 사용하여 mp3 오디오 파일을 추가하는 방법

JS에서 FileReader를 사용하여 사진을 업로드하기 전에 로컬 미리보기 기능을 구현하는 방법

에 따라 기본 선택 옵션을 설정하는 방법 태그를 선택하세요.

위 내용은 JS 엄격 모드를 자세히 설명하는 지식 포인트는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.