- 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의 엄격 모드 (Strict Mode)
엄격 모드의 제한과 예외
-
implements
, interface
, let
, package
, private
, protected
, public
, static
, yield
는 엄격 모드 코드 내에서 예약어이다 (12.7.2).
-
적합한 구현은 엄격 모드 코드를 처리할 때
NumericLiteral :: LegacyOctalIntegerLiteral
및
DecimalIntegerLiteral :: NonOctalDecimalIntegerLiteral
생성식 인스턴스를 허용하지 않아야 한다.
-
적합한 구현은 엄격 모드 코드를 처리할 때
EscapeSequence :: LegacyOctalEscapeSequence
및
EscapeSequence :: NonOctalDecimalEscapeSequence
생성식 인스턴스를 허용하지 않아야 한다.
-
선언되지 않은 식별자나 그렇지 않고서는 해소 불가능한 참조에 대한 대입은 전역 객체에 프로퍼티를 생성하지 않는다. 단순 대입이 엄격 모드 코드 내에서 발생하면 그 LeftHandSideExpression 은 해소 불가능한 Reference 로 평가되어서는 안 된다. 그렇게 되면 ReferenceError 예외가 발생한다 (6.2.5.6). 또한 LeftHandSideExpression 은 속성 값이 { [[Writable]]: false } 인 데이터 프로퍼티, 속성 값이 { [[Set]]: undefined } 인 접근자 프로퍼티, 또는 [[Extensible]] 내부 슬롯이 false 인 객체의 존재하지 않는 프로퍼티에 대한 참조여서도 안 된다. 이러한 경우
TypeError
예외가 발생한다 (13.15).
-
StringValue 가 "eval" 또는 "arguments" 인 IdentifierReference 는 대입 연산자 (13.15) 혹은 UpdateExpression (13.4) 의 LeftHandSideExpression 으로, 또는 Prefix Increment (13.4.4) 나 Prefix Decrement (13.4.5) 연산자의 피연산 UnaryExpression 으로 나타날 수 없다.
-
엄격 함수의 arguments 객체는 접근 시 TypeError 예외를 던지는 설정 불가(accessor, 비구성) 접근자 프로퍼티 "callee" 를 정의한다 (10.4.4.6).
-
엄격 함수의 arguments 객체는 해당 함수의 대응 형식 매개변수 바인딩과 array-indexed 프로퍼티 값을 동적으로 공유하지 않는다 (10.4.4).
-
엄격 함수에서 arguments 객체가 생성되는 경우 지역 식별자
arguments
의 그 객체에 대한 바인딩은 불변이며 따라서 대입 식의 대상이 될 수 없다 (10.2.11).
-
엄격 모드 코드 내에서 BindingIdentifier 의 StringValue 가 "eval" 또는 "arguments" 이면 SyntaxError 이다 (13.1.1).
-
엄격 모드 eval 코드는 호출자 변수 환경 내에 변수를 또는 함수를 인스턴스화할 수 없다. 대신 새로운 변수 환경이 생성되고 그 환경이 eval 코드의 선언 바인딩 인스턴스화를 위해 사용된다 (19.2.1).
-
엄격 모드 코드 내에서 this 가 평가되면 this 값은 객체로 강제(coerce)되지 않는다. undefined 또는 null 인 this 값은 전역 객체로 변환되지 않으며 원시 값도 래퍼 객체로 변환되지 않는다. 함수 호출(
Function.prototype.apply
, Function.prototype.call
사용 호출 포함)을 통해 전달된 this 값은 전달된 this 값을 객체로 강제하지 않는다 (10.2.1.2, 20.2.3.1, 20.2.3.3).
-
delete
연산자가 엄격 모드 코드 내에서 발생할 때 그 UnaryExpression 이 변수, 함수 인자, 함수 이름에 대한 직접 참조면 SyntaxError 가 던져진다 (13.5.1.1).
-
delete
연산자가 엄격 모드 코드 내에서 발생할 때 삭제할 프로퍼티가 속성 { [[Configurable]]: false } 를 갖거나 삭제할 수 없는 경우 TypeError 가 던져진다 (13.5.1.2).
-
엄격 모드 코드는 WithStatement 를 포함할 수 없다. 그런 문맥에서 WithStatement 가 나타나면 SyntaxError 이다 (14.11.1).
-
엄격 모드 코드 내에서 CatchParameter 가 발생하고 그 BoundNames 가
eval
또는 arguments
를 포함하면 SyntaxError 이다 (14.15.1).
-
동일한 BindingIdentifier 가 엄격 함수의 FormalParameters 내에서 두 번 이상 나타나면 SyntaxError 이다. Function, Generator, AsyncFunction 생성자를 사용하여 그러한 함수를 만들려는 시도도 SyntaxError 이다 (15.2.1, 20.2.1.1.1).
-
구현은 이 명세에 정의된 범위를 넘어 엄격 함수 내 함수 인스턴스의 "caller" 또는 "arguments" 라는 이름의 프로퍼티 의미를 확장할 수 없다.