?uem/p1-90`제어가 어떤 방식으로
eval 함수 호출은 모두 값 1을 반환합니다:
eval("1;;;;;")
eval("1;{}")
eval("1;var a;")
호출되면 다음 단계를 수행합니다:
let, const, using 및 await using 선언은 let 선언의
다음 생성 규칙의 인스턴스를 처리할 때
const, using 또는 await using 선언에서 절대로 발생하지 않도록 보장합니다.
var 문은
다음 생성 규칙별로 정의된다.
function 또는 class async function으로 시작할 수 없습니다. 그렇게 하면 let [로 시작할 수 없습니다. 그렇게 하면 첫 번째 let
if 문else]는 고전적인 “dangling else” 문제를 일반적인 방식으로 해결합니다. 즉, 연결할 if를 선택하는 것이 그 밖에는 모호할 때 else는 후보 if 중 가장 가까운(가장 안쪽의) if와 연결됩니다.do-while 문while 문for 문for-in, for-of 및 for-await-of 문이 절은 부록
이 절은 부록
이 절은 부록
next 메서드가 obj의 열거 가능한 프로퍼티 중 String 값 키를 모두 순회하는 반복자 객체를 반환합니다. 반복자 객체는 ECMAScript 코드에서 절대로 직접 접근할 수 없습니다. 프로퍼티 열거의 메커니즘과 순서는 명시되지 않지만 아래에 명시된 규칙을 따라야 합니다.반복자의 throw 및 return 메서드는 next 메서드는 객체 프로퍼티를 처리하여 해당 next 메서드가 처리하기 전에 삭제된 프로퍼티는 무시됩니다. 열거 중 대상 객체에 새로운 프로퍼티가 추가되더라도 현재 진행 중인 열거에서 새로 추가된 프로퍼티가 처리된다는 보장은 없습니다. 어떤 next 메서드에 의해 두 번 이상 반환되지 않습니다.
대상 객체의 프로퍼티 열거에는 해당 프로토타입, 프로토타입의 프로토타입 등의 프로퍼티를 재귀적으로 열거하는 것도 포함됩니다. 그러나 프로토타입의 프로퍼티가 반복자의 next 메서드에 의해 이미 처리된 프로퍼티와 같은 이름이면 처리하지 않습니다. 프로토타입 객체의 프로퍼티가 이미 처리되었는지를 결정할 때 [[Enumerable]] 속성 값은 고려하지 않습니다. 프로토타입 객체의 열거 가능한
또한 obj와 그 프로토타입 체인의 모든 객체가
ECMAScript 구현체는
다음은 이러한 규칙을 준수하는 ECMAScript 제너레이터 함수의
function* EnumerateObjectProperties(obj) {
const visited = new Set();
for (const key of Reflect.ownKeys(obj)) {
if (typeof key === "symbol") continue;
const desc = Reflect.getOwnPropertyDescriptor(obj, key);
if (desc) {
visited.add(key);
if (desc.enumerable) yield key;
}
}
const proto = Reflect.getPrototypeOf(obj);
if (proto === null) return;
for (const protoKey of EnumerateObjectProperties(proto)) {
if (!visited.has(protoKey)) yield protoKey;
}
}
For-In 반복자는 특정 객체에 대한 특정 반복을 나타내는 객체입니다. For-In 반복자 객체는 ECMAScript 코드에서 절대로 직접 접근할 수 없으며
%ForInIteratorPrototype% 객체는:
| 내부 슬롯 | 타입 | 설명 |
|---|---|---|
| [[Object]] | Object | 프로퍼티를 반복 중인 Object 값입니다. |
| [[ObjectWasVisited]] | Boolean |
반복자가 [[Object]]에서 [[OwnPropertyKeys]]를 호출했으면 |
| [[VisitedKeys]] |
String의 |
지금까지 이 반복자가 내보낸 값입니다. |
| [[RemainingKeys]] |
String의 |
프로토타입의 프로퍼티를 반복하기 전에(프로토타입이 |
continue 문static 초기화 블록 경계를 넘어서는 안 됩니다) Syntax Error입니다.
break 문static 초기화 블록 경계를 넘어서는 안 됩니다) Syntax Error입니다.
return 문return 문은 함수 실행을 중지시키며 대부분의 경우 호출자에게 값을 반환합니다. return 문이 실제로 호출자에게 값을 반환하지 않을 수도 있습니다. 예를 들어 try 블록에서 return 문의 finally 블록을 평가하는 동안 다른
with 문with 문은 계산된 객체에 대한
switch 문이 연산은 caseClauseNode의
제어가 어떤 방식으로
break 및 continue 문과 함께 사용하는 경우에만 사용됩니다. ECMAScript에는 goto 문이 없습니다.
LabelledEvaluation에 특별한 의미론을 갖는
throw 문try 문try 문은 런타임 오류 또는 throw 문과 같은 예외 상황이 발생할 수 있는 코드 블록을 둘러쌉니다. catch 절은 예외 처리 코드를 제공합니다. catch 절이 예외를 포착하면 해당
제어가 어떤 방식으로
debugger 문