質問: **arguments はどこに所属しているのでしょうか?** * Built-in objects ではなく、Function プロパティでもなく、全く別の独立した存在? 最初は、Built-in objects かな、と思い探したのですが、見つかりませんでした。 以下のページに下記記載があるのですが、これはどういう意味でしょうか? > > Function のプロパティとしての arguments はもはや使用されません > > > * argumentsオブジェクトは、Function プロパティとして使用していないから、Function プロパティではない? どこか別の所属? * argumentsオブジェクトは、Function プロパティとして使用していないが、Function プロパティに所属している? * 使用していないことと、所属の有無には、相関関係があるのでしょうか? * そもそも、「プロパティとして使用されません」とは、どういう意味でしょうか? * 使用可能だけど、非推奨ってこと?
回答: `arguments`は、実行コンテキストに属します。ローカル変数と同じイメージです。 関数オブジェクトを実行している間、その関数オブジェクトの`arguments`プロパティとしても`arguments`にアクセスすることができます。このプロパティは、関数が実行されていない間は`null`です (実行コンテキストが無いため)。 ``` function foo() { console.log(arguments == foo.arguments); } foo(1, 2, 3); // true console.log(foo.arguments); // null ``` 関数オブジェクトの `arguments` プロパティは、将来的に削除されます。現在 Strict モードで関数オブジェクトの `arguments` プロパティにアクセスすると、`TypeError`がスローされます。 ``` function foo() { "use strict"; console.log(foo.arguments); } foo(1, 2, 3); // TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them ```