ECMA-262§12.2によると、VariableStatement(つまりvar identifier=value
)は明示的に何も返しません。さらに、VariableStatementはステートメントです。ステートメントは値を返しません。また、式が配置される場所にステートメントを配置することは無効です。
たとえば、次のいずれも、価値を生み出す式が必要な場所にステートメントを配置するため、意味がありません。
var a = var b;
function fn() { return var x; }
§11.13.1に従い、変数()に割り当てると、割り当てられた値がidentifier=value
返されます。
を書くと、その値をvar a = 1;
宣言して初期化します。これはVariableStatementであるため、何も返さず、REPLはを出力します。a
1
undefined
a=1
に割り当てる式1
ですa
。がないためa
、JavaScriptは通常のコードで暗黙的にグローバル を作成します(ただし、厳密モードで新しいグローバルを暗黙的に作成することは許可されていないため、厳密モードでa
をスローします)。ReferenceError
以前に存在したかどうかに関係なくa
、式は割り当てられた値を返す1
ため、REPLはそれを出力します。