English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

базовый учебник JavaScript

объекты JavaScript

функции JavaScript

JS HTML DOM

JS браузер BOM

базовый учебник AJAX

руководство по JavaScript

JavaScript严格 모드(use strict)

ECMAScript 5введенный в JavaScript строгий режим являетсядобровольное присоединение один из способов ограничения вариантов JavaScript.

строгий режим не является просто подмножеством: он намеренно имеет различное семантическое значение по сравнению с обычным кодом.

строгий режим упрощает написание "безопасного" JavaScript.

строгий режим изменяет ранее принятые "ошибки синтаксиса" на фактические ошибки.

строгий режим, например, вы не можете использовать переменные, не объявленные явно.

정적 모드 호출

정적 모드는 스크립트나 함수의 시작 부분에 "use strict";를 추가하여 선언됩니다。

전체 스크립트를 정적 모드로 호출하려면, 다른 어떤 선언보다 먼저 "use strict" 문장을 입력합니다:

"use strict";
str="嗨,我是严格模式脚本!";  // undeclared str로 인해 오류가 발생합니다
테스트 봐‹/›

함수를 정적 모드로 호출하려면, 정확한 문장 "use strict";를 함수 본체에 위치시키고, 다른 어떤 문장보다 먼저 위치시켜야 합니다:

function myFunc() {
  // 함수 단계 정적 모드 문법
  "use strict";
  str="大家好,我是严格模式函数!";  // 이는 오류를 유발합니다
  return str;
}
테스트 봐‹/›

정적 모드는 더 간결한 코드를 작성하는 데 도움이 됩니다. 예를 들어, undeclared 변수 사용을 방지합니다。

이 "use strict" 명령은 스크립트나 함수의 시작 부분에서만 인식됩니다。

단문호와 중문호 문법 모두 허용됩니다('use strict'; 또는 "use strict";)。

정적 모드의 일반 제한

그렇게 알고 계시듯 정적 모드에서는 모든 변수를 선언해야 합니다。

변수가 아닌 식별자에 값을 할당하려고 할 때 ReferenceError가 발생합니다:

"use strict";
x= 5; // ReferenceError: x 가 정의되지 않았습니다
테스트 봐‹/›

undeclared 객체 사용이 허용되지 않습니다(객체도 변수입니다):

"use strict";
coord={x:10, y:20});   // ReferenceError: coord 가 정의되지 않았습니다
테스트 봐‹/›

정적 모드에서 변수를 제거하려고 시도할 때 문법 오류가 발생합니다:

"use strict";
var msg="Hello World";
delete msg;// SyntaxError
테스트 봐‹/›

동일하게, 정적 모드에서 함수를 제거하려고 시도할 때 문법 오류가 발생합니다:

"use strict";
function sum(a,b) {
return a + b;
}
delete sum;// SyntaxError
테스트 봐‹/›

정적 모드에서는 중복된 매개변수 이름 사용이 허용되지 않습니다:

"use strict";
function square(a,a) {  // SyntaxError
return a * a;
}
테스트 봐‹/›

정적 모드에서는 읽기 전용 속성에 쓰기가 허용되지 않습니다:

"use strict";
var person={name:"Akash",age: 22};
Object.defineProperty(person,"gender",{value:"male",writable:false});
person.gender="female";   // TypeError
테스트 봐‹/›

정적 모드에서는 with 문 사용이 허용되지 않습니다:

"use strict";
with(Math){x=sqrt(25);   // SyntaxError
테스트 봐‹/›

정적 모드에서는 오ctal 숫자 사용이 허용되지 않습니다:

"use strict";
var x = 010;   // SyntaxError
테스트 봐‹/›

보안 이유로eval()호출할 때의 범위에서 변수를 생성할 수 없습니다:

"use strict";
eval("var x = ", 10;
console.log(x);   // ReferenceError: x 변수가 정의되지 않았습니다
테스트 봐‹/›

문자열 "eval"는 식별자(변수 이름)로 사용될 수 없습니다:

"use strict";
var eval = "oldtoolbag.com";// SyntaxError
테스트 봐‹/›

문자열 "arguments"는 식별자(변수 이름)로 사용될 수 없습니다:

"use strict";
var arguments = "oldtoolbag.com";// SyntaxError
테스트 봐‹/›

미래의 ECMAScript 버전을 위한 길을 마련합니다

미래의 ECMAScript 버전에서는 새로운 문법이 도입될 수 있습니다,ES5strict 모드에서는 몇 가지 제한을 적용하여 전환을 간소화합니다。

이러한 변경을 금지한 기본을 바탕으로 하면 일부 변경이 더 쉬워집니다。

strict 모드에서는 다음 식별자 목록이 보존 키워드가 됩니다:

  • implements

  • interface

  • let

  • package

  • private

  • protected

  • public

  • static

  • yield

"use strict";
var package = true;  // This will cause an error
테스트 봐‹/›