- Toggle shortcuts help
?
- Toggle "can call user code" annotations
u
- Navigate to/from multipage
m
- Jump to search box
/
- Toggle pinning of the current clause
p
- Jump to the nth pin
1-9
- Jump to the 10th pin
0
- Jump to the most recent link target
`
Annex C (informative) ECMAScript의 엄격 모드
엄격 모드의 제한 및 예외
-
implements, interface, let, package, private, protected, public, static, 및 yield는 strict mode code 안에서 reserved word이다. (12.7.2).
-
conforming implementation은 strict mode code를 처리할 때
NumericLiteral :: LegacyOctalIntegerLiteral
및
DecimalIntegerLiteral :: NonOctalDecimalIntegerLiteral
production의 인스턴스를 허용해서는 안 된다.
-
conforming implementation은 strict mode code를 처리할 때
EscapeSequence :: LegacyOctalEscapeSequence
및
EscapeSequence :: NonOctalDecimalEscapeSequence
production의 인스턴스를 허용해서는 안 된다.
-
선언되지 않은 identifier 또는 달리 해결 불가능한 reference에 대한 assignment는 전역 객체에 프로퍼티를 생성하지 않는다. strict mode code 안에서 simple assignment가 발생할 때, 그 LeftHandSideExpression은 unresolvable Reference로 평가되어서는 안 된다. 그렇게 평가되면 ReferenceError 예외가 던져진다(6.2.5.6). LeftHandSideExpression은 또한 attribute value { [[Writable]]: false }를 가진 data property에 대한 reference, attribute value { [[Set]]: undefined }를 가진 accessor property에 대한 reference, 또는 [[Extensible]] 내부 슬롯이 false인 객체의 존재하지 않는 프로퍼티에 대한 reference여서도 안 된다. 이러한 경우에는
TypeError 예외가 던져진다(13.15).
-
StringValue가 "eval" 또는 "arguments"인 IdentifierReference는 Assignment operator(13.15)의 LeftHandSideExpression, UpdateExpression(13.4)의 LeftHandSideExpression, 또는 Prefix Increment(13.4.4)나 Prefix Decrement(13.4.5) operator가 작용하는 UnaryExpression으로 나타날 수 없다.
-
strict 함수의 arguments object는 접근 시 TypeError 예외를 던지는 non-configurable accessor property "callee"를 정의한다(10.4.4.6).
-
strict 함수의 arguments object는 자신의 array-indexed 프로퍼티 값을 해당 함수의 대응하는 formal parameter binding과 동적으로 공유하지 않는다. (10.4.4).
-
strict 함수에서 arguments object가 생성되면, local identifier
arguments의 arguments object에 대한 binding은 immutable이므로 assignment expression의 target이 될 수 없다. (10.2.11).
-
strict mode code 안에서 BindingIdentifier의 StringValue가 "eval" 또는 "arguments" 중 하나이면 SyntaxError이다(13.1.1).
-
strict mode eval code는 eval 호출자의 variable environment 안에 변수나 함수를 instantiate할 수 없다. 대신 새로운 variable environment가 생성되고, 그 environment가 eval code의 declaration binding instantiation에 사용된다(19.2.1).
-
strict mode code 안에서 this가 평가되면, this 값은 객체로 강제 변환되지 않는다. undefined 또는 null인 this 값은 전역 객체로 변환되지 않으며 primitive value는 wrapper object로 변환되지 않는다. 함수 호출(
Function.prototype.apply 및 Function.prototype.call을 사용한 호출 포함)을 통해 전달된 this 값은 전달된 this 값을 객체로 강제 변환하지 않는다(10.2.1.2, 20.2.3.1, 20.2.3.3).
-
strict mode code 안에서
delete operator가 발생할 때, 그 UnaryExpression이 변수, 함수 인자, 또는 함수 이름에 대한 직접 reference이면 SyntaxError가 던져진다(13.5.1.1).
-
strict mode code 안에서
delete operator가 발생할 때, 삭제될 프로퍼티가 attribute { [[Configurable]]: false }를 가지거나 달리 삭제될 수 없으면 TypeError가 던져진다(13.5.1.2).
-
Strict mode code는 WithStatement를 포함할 수 없다. 그러한 context에서 WithStatement가 발생하면 SyntaxError이다(14.11.1).
-
strict mode code 안에서 CatchParameter가 발생하고 CatchParameter의 BoundNames가
eval 또는 arguments 중 하나를 포함하면 SyntaxError이다(14.15.1).
-
strict 함수의 FormalParameters 안에 같은 BindingIdentifier가 한 번보다 많이 나타나면 SyntaxError이다. Function, Generator, 또는 AsyncFunction 생성자를 사용하여 그러한 함수를 만들려는 시도는 SyntaxError이다(15.2.1, 20.2.1.1.1).
-
구현은 이 명세에 정의된 것을 넘어 strict 함수 안에서 function instance의 "caller" 또는 "arguments"라는 이름의 프로퍼티 의미를 확장할 수 없다.