>웹 프론트엔드 >JS 튜토리얼 >JavaScript 시작점(엄격 모드에 대한 심층적 이해)_기본 지식

JavaScript 시작점(엄격 모드에 대한 심층적 이해)_기본 지식

WBOY
WBOY원래의
2016-05-16 17:42:441100검색

엄격 모드는 ECMAScript5의 새로운 기능입니다. ECMAScript5는 ECMAScript3과 이전 버전과 호환되지만 엄격 모드를 사용하면 ECMAScript5에서 "더 이상 권장되지 않는" 모든 ECMAScript3 구문 함수를 덮어쓰게 되며 해당 함수가 나타나면 한 줄이 표시됩니다. 엄격 모드는 개발자가 일반적이고 악명 높은 오류를 다르게 처리하는 "더 나은" 버전의 Javascript를 선택할 수 있도록 도입되었습니다. IE10 및 Opera12를 포함한 모든 주요 브라우저의 최신 버전은 엄격 모드를 지원합니다. 엄격 모드에 대한 대부분의 정보는 ES5 사양 [PDF]의 223페이지에서 찾을 수 있습니다.

엄격 모드 활성화 방법
엄격 모드를 전역적으로 또는 기능 범위 내에서 사용할 수 있습니다. 엄격 모드를 전역적으로 활성화하려면 프로그램의 첫 번째 줄에 있는 코드를 사용하세요.

코드 복사 코드는 다음과 같습니다. :

'use strict';

함수 내에서 strict 모드를 활성화하려면 함수 본문의 첫 번째 줄에 있는 코드만 사용하면 됩니다.
코드 복사 코드는 다음과 같습니다.

function imStrict(){
 'use strict ';
// ...다른 코드...
}

엄격 모드를 활성화하는 명령문은 새로운 구문이 없는 일반 문자열 "use strict"입니다. 이는 오래된 브라우저에 부정적인 영향이 없다는 것을 의미하므로 자유롭게 사용하시기 바랍니다.

함수 내에서 엄격 모드를 활성화하는 실제 적용은 외부 코드가 영향을 받지 않도록 엄격 모드 함수 내에서 전체 Javascript 클래스 라이브러리를 정의하는 것입니다.
코드 복사 코드는 다음과 같습니다.

(function(){
 "use strict";
 // 라이브러리 정의 strict ...
})();

엄격 모드는 무엇을 가져오나요?
특수 기능을 소개하기 전에, 엄격 모드를 기억해야 합니다. 목표 중 하나는 오류를 더 빠르게 디버깅하는 것입니다. 개발자의 디버깅을 돕는 가장 좋은 방법은 자동으로 실패하거나 이상한 동작을 보이는 것(요즘 Javascript가 더 이상 사용되지 않는 이유)보다는 특정 패턴이 발생할 때 오류를 발생시키는 것입니다. 엄격 모드의 코드는 더 많은 오류 메시지를 발생시킵니다. 이는 개발자가 즉시 해결해야 하는 문제를 빠르게 알아차리는 데 도움이 되기 때문에 좋습니다.

with 문 제거(Eliminates with)
먼저 strict 모드는 with 문을 제거합니다. with 문이 엄격 모드로 나타나면 잘못된 Javascript 문으로 간주되어 구문 오류가 발생합니다. 따라서 엄격 모드를 사용하는 첫 번째 단계는 with를 사용하고 있지 않은지 확인하는 것입니다.
코드 복사 코드는 다음과 같습니다.

// strict에서는 구문 오류가 발생합니다. mode
with(location){
alert(href);


우발적 전역 방지(우발적 전역 방지)
두 번째 점 is 이면 할당 전에 변수를 선언해야 합니다. 비엄격 모드에서 선언되지 않은 변수에 값을 할당하면 해당 이름을 가진 전역 변수가 자동으로 생성됩니다. 이는 Javascript에서 가장 흔히 발생하는 오류 중 하나입니다. 엄격 모드에서는 오류가 발생합니다.

코드 복사 코드는 다음과 같습니다.
// 엄격 모드에서 오류 발생
(function(){
someUndeclaredVar ="foo";
}());


이 값의 강제 취소(이 강제 제거) 또 다른 중요한 변경 사항은 이 값이 null이거나 정의되지 않은 경우 더 이상 전역 객체로 캐스팅되지 않는다는 것입니다. 즉, 원래 값을 유지하므로 캐스트에 의존하는 일부 코드에서 오류가 발생할 수 있습니다. 예:

코드 복사 코드는 다음과 같습니다.
window.color ="red ";
function sayColor(){
// 엄격 모드에서는 창을 가리키지 않습니다.
alert(this.color);
}
// 다음 두 가지 경우에는 둘 다 엄격 모드에서 발생합니다. Error
sayColor()
sayColor.call(null);
기본적으로 this 값을 할당해야 하며, 그렇지 않으면 정의되지 않은 값이 그대로 유지됩니다. 즉, 생성자를 호출할 때 new 키워드를 생략하면 오류가 발생합니다.
코드 복사 코드는 다음과 같습니다.

functionPerson(name){
this.name = name;
}
// 엄격 모드에서 오류 발생
var me =Person("Nicholas"); 🎜 >
이 코드에서는 Person 생성자를 호출할 때 new 키워드가 누락되었으며 this 값이 정의되지 않았습니다. 정의되지 않은 속성을 추가할 수 없으므로 이 코드에서는 오류가 발생합니다. 비엄격 모드에서는 전역 객체로 강제 변환되므로 name 속성을 전역 변수로 올바르게 할당할 수 있습니다.

중복 없음코딩을 많이 하다 보면 객체에 중복된 속성을 정의하거나 함수에 중복된 매개변수 이름을 정의하기 쉽습니다. 엄격 모드에서는 두 상황 모두 오류가 발생합니다.

코드 복사 코드는 다음과 같습니다.
// 엄격 모드 오류 - 중복 매개변수
function doSomething(value1, value2, value1){
//code
}
// 엄격 모드 오류 - 중복 속성
var 객체 ={
foo:"bar",
foo:"baz"
};

둘 다 구문 오류이며 코드가 실행되기 전에 오류가 발생합니다.

Safer eval()(Safer eval())eval()은 제거되지 않았지만 strict 모드에서 일부 변경되었습니다. 가장 큰 변화는 eval() 문에서 선언된 변수와 함수가 포함 범위에 생성되지 않는다는 것입니다. 예:

코드 복사 코드는 다음과 같습니다.
(function(){
eval( "var x = 10;");
// 비엄격 모드에서는 x가 10입니다.
// 엄격 모드에서는 x가 선언되지 않고 오류가 발생합니다.
alert( x);
}());

eval()에 의해 생성된 모든 변수나 함수는 여전히 eval()에 유지됩니다. 그러나 eval()에서 값을 반환하여 값을 전달할 수 있습니다.

코드 복사 코드는 다음과 같습니다.
(function(){
var result =eval("var x = 10, y = 20; x y");
// 엄격 모드와 비엄격 모드에서 정상적으로 작동합니다. (30개 가져옴)
alert(result);
}());


Errors for immutables(Errors for immutables) ECMAScript 5에서도 속성을 읽기 전용으로 설정하거나 전체 개체 구조를 고정하는 등 속성 특성을 수정하는 기능. 엄격하지 않은 모드에서는 불변 속성을 수정하려는 시도가 자동으로 실패합니다. 일부 기본 API를 사용할 때 이런 종류의 문제가 발생할 수 있습니다. 엄격 모드는 허용되지 않는 방식으로 객체나 객체의 속성을 수정하려고 할 때마다 오류가 발생하도록 보장합니다.

코드 복사 코드는 다음과 같습니다.
var person ={}; Object.defineProperty (person,"name"{
writable:false,
value:"Nicholas"
})
// 비엄격 모드에서는 자동으로 실패하고 오류가 발생합니다. 엄격 모드
person.name ="John";


이 예에서는 name 속성이 읽기 전용으로 설정되어 있습니다. 비엄격 모드에서는 이름 할당이 자동으로 실패하고 오류가 발생합니다.


참고
: ECMAScript 속성 기능을 사용하는 경우 엄격 모드를 활성화하는 것이 좋습니다. 객체의 가변성을 변경하는 경우 엄격하지 않은 모드에서는 자동으로 처리되는 여러 오류가 발생하게 됩니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.