?uem/p1-90`eval 関数の呼出しはいずれも値 1 を返します。
eval("1;;;;;")
eval("1;{}")
eval("1;var a;")
呼び出されたとき、次の手順を実行します。
let、const、using、および await using 宣言は、let 宣言内の
次の生成規則のインスタンスを処理するとき
const、using、または await using 宣言内には決して現れません。
var 文は、
envRecord に
次の生成規則ごとに定義される。
function または class async function で始めることはできません。これは let [ で始めることはできません。これは、最初の let
if 文else] は、古典的な「dangling else」問題を通常の方法で解決します。つまり、関連付ける if の選択がそれ以外では曖昧な場合、else は候補となる if のうち最も近い(最も内側の)ものに関連付けられます。この規則を適用する必要があるのは、
do-while 文この規則を適用する必要があるのは、
while 文この規則を適用する必要があるのは、
for 文この規則を適用する必要があるのは、
for-in、for-of、および for-await-of 文この節は、附属書
この規則を適用する必要があるのは、
この節は、附属書
この節は、附属書
next メソッドが obj の列挙可能なプロパティの String 値キーをすべて反復するイテレーターオブジェクトを返す。このイテレーターオブジェクトは ECMAScript コードから直接アクセスされることはない。プロパティを列挙する仕組みと順序は規定されないが、以下で規定される規則に適合しなければならない。イテレーターの throw および return メソッドは next メソッドは、next メソッドによって処理される前に削除されたプロパティは無視されます。列挙中に対象オブジェクトへ新しいプロパティが追加された場合、新しく追加されたプロパティが進行中の列挙で処理されることは保証されません。next メソッドによって最大1回だけ返されます。
対象オブジェクトのプロパティの列挙には、そのプロトタイプ、そのプロトタイプのプロトタイプ、というように再帰的にプロトタイプのプロパティを列挙することも含まれます。ただし、プロトタイプのプロパティが、イテレーターの 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 Iterator は、特定のオブジェクトに対する特定の反復を表すオブジェクトです。For-In Iterator オブジェクトは ECMAScript コードから直接アクセスされることはなく、
%ForInIteratorPrototype% オブジェクトは:
| 内部スロット | 型 | 説明 |
|---|---|---|
| [[Object]] | an Object | プロパティが反復されている Object 値です。 |
| [[ObjectWasVisited]] | a Boolean |
イテレーターが [[Object]] に対して [[OwnPropertyKeys]] を呼び出している場合は |
| [[VisitedKeys]] |
a |
このイテレーターがこれまでに出力した値です。 |
| [[RemainingKeys]] |
a |
そのプロトタイプが |
continue 文static 初期化ブロックの境界を越えずに)入れ子になっていない場合、Syntax Error です。
break 文static 初期化ブロックの境界を越えずに)入れ子になっていない場合、Syntax Error です。
return 文return 文は関数の実行を停止させ、ほとんどの場合、呼出し元へ値を返します。return 文が実際には呼出し元へ値を返さない場合があります。たとえば try ブロック内では、return 文の finally ブロックの評価中に別の
with 文新しい ECMAScript コードでwith 文を使用することは推奨されません。
with 文は、計算されたオブジェクトの
2番目の規則を適用する必要があるのは、
switch 文この操作は caseClauseNode の
break 文および continue 文と組み合わせてのみ使用されます。ECMAScript には goto 文はありません。
LabelledEvaluation に特別な意味論を持つ
throw 文try 文try 文は、実行時エラーや throw 文などの例外的な条件が発生し得るコードブロックを囲みます。catch 節は例外処理コードを提供します。catch 節が例外を捕捉すると、その
debugger 文