이 글은 주로 JS strict 모드에서 관련된 지식 포인트와 코드 예제를 모아 놓은 것입니다. 관심이 있으신 분은 편집자를 따라가서 함께 학습해 보시기 바랍니다.
소위 엄격 모드는 실제로 어떤 변수에도 할당되지 않는 문자열 "use strict"입니다.
이 프롬프트가 전역 범위에 제공되면 전체 스크립트가 엄격 모드를 사용합니다. 함수에서만 엄격 모드를 켤 수도 있습니다
1. 엄격 모드에는 전역 변수가 없습니다
a="test"
엄격 모드에서는 오류가 보고되지만 비엄격 모드에서는 정상입니다. mode
2. 변수 삭제
var에는 세 가지 선언 상황이 있습니다.
var 선언된 전역 변수
var 선언된 지역 변수
eval() 전역 변수가
first, second 이 경우 삭제를 이용하여 삭제할 수 없습니다.
첫 번째 경우에 선언된 전역 개체는 Windows의 속성이지만 이 속성은 configurable=false이므로 삭제할 수 없습니다.
두 번째 경우에는 로컬 변수가 더 나쁩니다. 첨부된 객체는 누구도 접근할 수 없습니다. 어떻게 삭제하는지 모르겠습니다.
세 번째 경우인 eval()에 대해서는 나중에 설명하겠습니다.
주제로 돌아갑니다. 즉, 비엄격 모드에서는 변수를 삭제할 수 있지만 실패하고 false를 반환합니다.
엄격 모드에서 변수를 삭제하면 오류가 보고됩니다.
3. 개체
다음 상황에서는 개체를 작동할 때 오류가 보고됩니다.
읽기 전용 속성을 할당하면 오류가 보고됩니다.
구성할 수 없는 속성에 대해 삭제를 사용하면 오류 보고
확장 불가능합니다. 객체에 속성을 추가하면 오류가 보고됩니다
객체 리터럴을 사용할 때 속성 이름은 고유해야 합니다. 예를 들어
var person={ name:"1", name:"2" }
은 비엄격 모드에서 두 번째 값이 기본값으로 설정되고, 엄격 모드에서는 오류가 보고됩니다.
4. 함수
Strict 모드에서는 함수 매개변수 이름이 고유해야 합니다.
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属性,就会报错。
관련 권장 사항:
JS 구문 분석 순서 및 범위 및 엄격 모드에 대한 간략한 소개
JavaScript 엄격 모드의 이에 대한 정보 문제 설명
위 내용은 JS 엄격 모드 예시 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!