- 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" 라는 이름의 프로퍼티 의미를 확장할 수 없다.