10566


**arguments はどこに所属しているのでしょうか？**

  * Built-in objects ではなく、Function プロパティでもなく、全く別の独立した存在？

最初は、Built-in objects かな、と思い探したのですが、見つかりませんでした。  
以下のページに下記記載があるのですが、これはどういう意味でしょうか？

> Function のプロパティとしての arguments はもはや使用されません

<https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments>

  * argumentsオブジェクトは、Function プロパティとして使用していないから、Function プロパティではない？ どこか別の所属？
  * argumentsオブジェクトは、Function プロパティとして使用していないが、Function プロパティに所属している？

  * 使用していないことと、所属の有無には、相関関係があるのでしょうか？

  * そもそも、「プロパティとして使用されません」とは、どういう意味でしょうか？

  * 使用可能だけど、非推奨ってこと？


CC BY-SA 3.0
2015-05-25T00:34:29.123
10565
2015-05-25T11:55:58.320
2015-05-25T01:12:32.797
208
7886
question
javascript
argumentsはどこに所属している？


`arguments`は、実行コンテキストに属します。ローカル変数と同じイメージです。

関数オブジェクトを実行している間、その関数オブジェクトの`arguments`プロパティとしても`arguments`にアクセスすることができます。このプロパティは、関数が実行されていない間は`null`です
(実行コンテキストが無いため)。

[code]

    function foo() {
      console.log(arguments == foo.arguments);
    }
    
    foo(1, 2, 3); // true
    console.log(foo.arguments); // null
    
[/code]

関数オブジェクトの `arguments` プロパティは、将来的に削除されます。現在 Strict モードで関数オブジェクトの `arguments`
プロパティにアクセスすると、`TypeError`がスローされます。

[code]

    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
    
[/code]


CC BY-SA 3.0
2015-05-25T01:20:14.993
10566
2015-05-25T01:20:14.993
4809
10565
answer


> Function のプロパティとしての arguments はもはや使用されません

とは非標準のFunction.prototype.argumentsは使うなということです。

[code]

    function fn () {
      return arguments == fn.arguments
      // 同じものだが後者は使わず前者を使う
    }
    fn()  // true
    
[/code]


CC BY-SA 3.0
2015-05-25T11:55:58.320
10602
2015-05-25T11:55:58.320
5721
10565
answer