aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/reference/functions/arguments
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
commit33058f2b292b3a581333bdfb21b8f671898c5060 (patch)
tree51c3e392513ec574331b2d3f85c394445ea803c6 /files/ja/web/javascript/reference/functions/arguments
parent8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff)
downloadtranslated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip
initial commit
Diffstat (limited to 'files/ja/web/javascript/reference/functions/arguments')
-rw-r--r--files/ja/web/javascript/reference/functions/arguments/@@iterator/index.html63
-rw-r--r--files/ja/web/javascript/reference/functions/arguments/callee/index.html158
-rw-r--r--files/ja/web/javascript/reference/functions/arguments/caller/index.html56
-rw-r--r--files/ja/web/javascript/reference/functions/arguments/index.html227
-rw-r--r--files/ja/web/javascript/reference/functions/arguments/length/index.html124
5 files changed, 628 insertions, 0 deletions
diff --git a/files/ja/web/javascript/reference/functions/arguments/@@iterator/index.html b/files/ja/web/javascript/reference/functions/arguments/@@iterator/index.html
new file mode 100644
index 0000000000..e0690a49af
--- /dev/null
+++ b/files/ja/web/javascript/reference/functions/arguments/@@iterator/index.html
@@ -0,0 +1,63 @@
+---
+title: 'arguments[@@iterator]()'
+slug: Web/JavaScript/Reference/Functions/arguments/@@iterator
+tags:
+ - Functions
+ - JavaScript
+ - Property
+ - arguments
+translation_of: Web/JavaScript/Reference/Functions/arguments/@@iterator
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<p><strong><code>@@iterator</code></strong> プロパティの初期値は {{jsxref("Array.prototype.values")}} プロパティの初期値と同じ関数オブジェクトです。</p>
+
+<h2 id="Syntax" name="Syntax">構文</h2>
+
+<pre class="syntaxbox notranslate"><var>arguments</var>[Symbol.iterator]()</pre>
+
+<h2 id="Examples" name="Examples">例</h2>
+
+<h3 id="Iteration_using_for...of_loop" name="Iteration_using_for...of_loop">for...of ループを用いた反復</h3>
+
+<pre class="brush: js notranslate">function f() {
+ // your browser must support for..of loop
+ // and let-scoped variables in for loops
+ for (let letter of arguments) {
+ console.log(letter);
+ }
+}
+f('w', 'y', 'k', 'o', 'p');
+</pre>
+
+<h2 id="Specifications" name="Specifications">仕様書</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">仕様書</th>
+ </tr>
+ </tbody>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-createunmappedargumentsobject', 'CreateUnmappedArgumentsObject')}}</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-createmappedargumentsobject', 'CreateMappedArgumentsObject')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>
+
+<div>
+<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div>
+
+<p>{{Compat("javascript.functions.arguments.@@iterator")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">関連情報</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.values()")}}</li>
+</ul>
diff --git a/files/ja/web/javascript/reference/functions/arguments/callee/index.html b/files/ja/web/javascript/reference/functions/arguments/callee/index.html
new file mode 100644
index 0000000000..a9dd72897a
--- /dev/null
+++ b/files/ja/web/javascript/reference/functions/arguments/callee/index.html
@@ -0,0 +1,158 @@
+---
+title: arguments.callee
+slug: Web/JavaScript/Reference/Functions/arguments/callee
+tags:
+ - Deprecated
+ - JavaScript
+ - Reference
+ - arguments
+ - プロパティ
+ - 関数
+translation_of: Web/JavaScript/Reference/Functions/arguments/callee
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<p><strong><code>arguments.callee</code></strong> プロパティは現在実行中の関数を示します。</p>
+
+<h2 id="Description" name="Description">説明</h2>
+
+<p><code>callee</code> は <code>arguments</code> オブジェクトのプロパティです。関数の本体の内部で現在実行中の関数を参照するために使用します。これは関数名が不明であるとき、たとえば名前のない関数式(「無名関数」)の内部などで便利です。</p>
+
+<div class="warning"><strong>警告:</strong> ECMAScript 第5版では、 <a href="/ja/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode" title="/ja/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode">strict モード</a>における <code>arguments.callee()</code> の使用を禁止しています。関数式に名前を付けるか、関数が自身を呼び出す必要がある場合に関数宣言を使用するかして <code>arguments.callee()</code> の使用を避けてください。</div>
+
+<h3 id="Why_was_arguments.callee_removed_from_ES5_strict_mode" name="Why_was_arguments.callee_removed_from_ES5_strict_mode">なぜ <code>arguments.callee</code> は ES5 strict mode で削除されたのか</h3>
+
+<p>(<a href="http://stackoverflow.com/a/235760/578288" title="http://stackoverflow.com/a/235760/578288">olliej による Stack Overflow の回答</a>によれば)</p>
+
+<p>古いバージョンの JavaScript では名前付きの関数式が利用できず、このため再帰の関数式を作成することができませんでした。</p>
+
+<p>例えば、以下の構文は動作しました。</p>
+
+<pre class="brush: js notranslate">function factorial (n) {
+ return !(n &gt; 1) ? 1 : factorial(n - 1) * n;
+}
+
+[1, 2, 3, 4, 5].map(factorial);</pre>
+
+<p>しかし、</p>
+
+<pre class="brush: js notranslate">[1, 2, 3, 4, 5].map(function(n) {
+ return !(n &gt; 1) ? 1 : /*ここでどうする?*/ (n - 1) * n;
+});</pre>
+
+<p>は動作しませんでした。これをうまくやるために <code>arguments.callee</code> が追加され、あなたは以下のようなことができます。</p>
+
+<pre class="brush: js notranslate">[1, 2, 3, 4, 5].map(function(n) {
+ return !(n &gt; 1) ? 1 : arguments.callee(n - 1) * n;
+});</pre>
+
+<p>しかし、これは実際には本当にダメな解決法でした。これは(他の <code>arguments</code> や <code>callee</code>、<code>caller</code> の問題と組み合わさって)、一般的には、再帰のインライン化と末尾再帰が不可能になるのです(あなたはこれをトレースなどを通じて選択した場合では達成できます。しかし最良のコードであっても、逆に不要な検査においては最適未満です)。他の大きな問題としては、再帰呼び出しが別の <code>this</code> の値になることです。例えば、</p>
+
+<pre class="brush: js notranslate">var global = this;
+
+var sillyFunction = function(recursed) {
+ if (!recursed) { return arguments.callee(true); }
+ if (this !== global) {
+ alert('This is: ' + this);
+ } else {
+ alert('This is the global');
+ }
+}
+
+sillyFunction();</pre>
+
+<p>ECMAScript 3 は、名前付き関数式を許可することでこれらの問題を解決しました。例えば:</p>
+
+<pre class="brush: js notranslate">[1, 2, 3, 4, 5].map(function factorial(n) {
+ return !(n &gt; 1) ? 1 : factorial(n - 1)*n;
+});</pre>
+
+<p>これには多くの利点があります:</p>
+
+<ul>
+ <li>他の関数と同様に、あなたのコード内から呼び出すことができる</li>
+ <li>外側のスコープに変数を作らない (<a href="http://kangax.github.io/nfe/#example_1_function_expression_identifier_leaks_into_an_enclosing_scope">IE 8 以下を除く</a>)</li>
+ <li>arguments オブジェクトにアクセスするよりもパフォーマンスが良い</li>
+</ul>
+
+<p>Another feature that was deprecated was <code>arguments.callee.caller</code>, or more specifically <code>Function.caller</code>. Why is this? Well, at any point in time you can find the deepest caller of any function on the stack, and as I said above looking at the call stack has one single major effect: it makes a large number of optimizations impossible, or much much more difficult. For example, if you cannot guarantee that a function <code>f</code> will not call an unknown function, it is not possible to inline <code>f</code>. Basically it means that any call site that may have been trivially inlinable accumulates a large number of guards:</p>
+
+<pre class="brush: js notranslate">function f(a, b, c, d, e) { return a ? b * c : d * e; }</pre>
+
+<p>If the JavaScript interpreter cannot guarantee that all the provided arguments are numbers at the point that the call is made, it needs to either insert checks for all the arguments before the inlined code, or it cannot inline the function. Now in this particular case a smart interpreter should be able to rearrange the checks to be more optimal and not check any values that would not be used. However in many cases that's just not possible and therefore it becomes impossible to inline.</p>
+
+<h2 id="Examples" name="Examples">例</h2>
+
+<h3 id="Example.3A_Using_arguments.callee_in_an_anonymous_recursive_function" name="Example.3A_Using_arguments.callee_in_an_anonymous_recursive_function">例: 無名再帰関数内での <code>arguments.callee</code> の使用</h3>
+
+<p>再帰関数は自分自身を参照する必要があります。関数が自分自身を参照するには、一般的には関数の名前を使用します。しかしながら、無名関数には名前がありません。さらにその無名関数を参照するアクセス可能な変数も無い(関数がどの変数にも代入されていない)場合、その関数には自分自身を参照する手段がありません(無名関数は<a href="/ja/docs/JavaScript/Reference/Operators/Special_Operators/function_Operator" title="JavaScript/Reference/Operators/Special_Operators/function_Operator">関数式</a>または <a href="/ja/docs/JavaScript/Reference/Global_Objects/Function" title="JavaScript/Reference/Global_Objects/Function"><code>Function</code> コンストラクター</a>によって作成できます)。したがって、これを参照するアクセス可能な変数がない場合、関数が自分自身を参照できる唯一の方法は <code>arguments.callee</code> による方法です。</p>
+
+<p>次の例では関数を定義し、その関数内でさらに階乗関数を定義し、それを返しています。</p>
+
+<pre class="brush: js notranslate">function create() {
+ return function(n) {
+ if (n &lt;= 1)
+ return 1;
+ return n * arguments.callee(n - 1);
+ };
+}
+
+var result = create()(5); // 120 (5 * 4 * 3 * 2 * 1) を返す</pre>
+
+<h3 id="良い代替手段がない場合の_arguments.callee_の使用">良い代替手段がない場合の <code>arguments.callee</code> の使用</h3>
+
+<p>ただし次のような場合、 <code>arguments.callee</code> に代わるものが無いために、その非推奨はバグである可能性があります ( {{Bug("725398")}} を参照):</p>
+
+<pre class="brush: js notranslate">function createPerson(sIdentity) {
+ var oPerson = new Function('alert(arguments.callee.identity);');
+ oPerson.identity = sIdentity;
+ return oPerson;
+}
+
+var john = createPerson('John Smith');
+
+john();</pre>
+
+<h2 id="Specifications" name="Specifications">仕様策定状況</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">仕様書</th>
+ <th scope="col">状況</th>
+ <th scope="col">コメント</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>初回定義。 JavaScript 1.2 で実装</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2>
+
+<div class="hidden">このページの互換性一覧表は構造化データから生成されます。データに貢献したいのであれば、 <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div>
+
+<p>{{Compat("javascript.functions.arguments.callee")}}</p>
+
+<h2 id="See_also" name="See_also">関連項目</h2>
+
+<ul>
+ <li>{{jsxref("Function")}}</li>
+</ul>
diff --git a/files/ja/web/javascript/reference/functions/arguments/caller/index.html b/files/ja/web/javascript/reference/functions/arguments/caller/index.html
new file mode 100644
index 0000000000..3626d7644b
--- /dev/null
+++ b/files/ja/web/javascript/reference/functions/arguments/caller/index.html
@@ -0,0 +1,56 @@
+---
+title: caller
+slug: Web/JavaScript/Reference/Functions/arguments/caller
+translation_of: Archive/Web/JavaScript/arguments.caller
+---
+<p> </p>
+
+<p>{{ Obsolete_header() }}</p>
+
+<p>{{ 英語版章題("Summary") }}</p>
+
+<h3 id=".E6.A6.82.E8.A6.81" name=".E6.A6.82.E8.A6.81">概要</h3>
+
+<p>現在実行している関数を呼び出した関数を示します。</p>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr>
+ <td class="header" colspan="2"><a href="/Ja/Core_JavaScript_1.5_Reference/Functions/arguments" title="Ja/Core_JavaScript_1.5_Reference/Functions/arguments">arguments</a> のプロパティ</td>
+ </tr>
+ <tr>
+ <td>実装されたバージョン:</td>
+ <td>JavaScript 1.1, NES 2.0
+ <p>JavaScript 1.3: 非推奨とする。<span class="comment">JavaScript ??: Removed</span></p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>{{ 英語版章題("Description") }}</p>
+
+<h3 id=".E8.AA.AC.E6.98.8E" name=".E8.AA.AC.E6.98.8E">説明</h3>
+
+<p><strong><code>arguments.caller</code> はもはや使用されていません。</strong> 代わりに関数オブジェクトの非標準の {{jsxref("Function.caller")}} プロパティが使えます。詳細はその説明を参照してください。</p>
+
+<p><code>arguments.caller</code> プロパティは関数本体の中でのみ利用可能です。</p>
+
+<p>{{ 英語版章題("Examples") }}</p>
+
+<h3 id=".E4.BE.8B" name=".E4.BE.8B">例</h3>
+
+<p>次のコードは、関数の中で <code>arguments.caller</code> の値をチェックします。</p>
+
+<pre class="eval">function myFunc() {
+ if (arguments.caller == null) {
+ return ("The function was called from the top!");
+ } else
+ return ("This function's caller was " + arguments.caller);
+}
+</pre>
+
+<p> </p>
+
+<p> </p>
+
+<p>{{ languages( { "en": "en/JavaScript/Reference/Functions_and_function_scope/arguments/caller", "fr": "fr/R\u00e9f\u00e9rence_de_JavaScript_1.5_Core/Fonctions/arguments/caller", "pl": "pl/Dokumentacja_j\u0119zyka_JavaScript_1.5/Funkcje/arguments/caller" } ) }}</p>
diff --git a/files/ja/web/javascript/reference/functions/arguments/index.html b/files/ja/web/javascript/reference/functions/arguments/index.html
new file mode 100644
index 0000000000..4990f359bc
--- /dev/null
+++ b/files/ja/web/javascript/reference/functions/arguments/index.html
@@ -0,0 +1,227 @@
+---
+title: arguments
+slug: Web/JavaScript/Reference/Functions/arguments
+tags:
+ - Functions
+ - JavaScript
+ - Namespace
+ - Reference
+ - arguments
+ - 名前空間
+translation_of: Web/JavaScript/Reference/Functions/arguments
+---
+<div>{{JSSidebar("Functions")}}</div>
+
+<p><strong><code>arguments</code></strong> は<ruby>配列風<rp> (</rp><rt><code>Array</code>-like</rt><rp>) </rp></ruby>オブジェクトであり、<a href="/ja/docs/Web/JavaScript/Guide/Functions">関数</a>に渡された引数の値を含んでおり、関数内からアクセスすることができます。</p>
+
+<div>{{EmbedInteractiveExample("pages/js/functions-arguments.html")}}</div>
+
+<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div>
+
+<h2 id="Description" name="Description">解説</h2>
+
+<div class="blockIndicator note">
+<p><strong>注:</strong> ES6 互換のコードを書く場合は、<a href="/ja/docs/Web/JavaScript/Reference/Functions/rest_parameters">残余引数</a>が推奨されます。</p>
+</div>
+
+<div class="note">
+<p><strong>注:</strong> 「配列風」とは、 <code>arguments</code> が {{jsxref("Functions/arguments/length", "length")}} プロパティと 0 から始まる添字のプロパティを持っているものの、 {{JSxRef("Array")}} の組込みメソッド、例えば {{jsxref("Array.forEach", "forEach()")}} や {{jsxref("Array.map", "map()")}} を持っていないということです。詳しくは <a href="#Description">解説</a>の節を見てください。</p>
+</div>
+
+<p><code>arguments</code> オブジェクトはすべての(<a href="/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions">アロー</a>ではない)関数内で利用可能なローカル変数です。<code>arguments</code> オブジェクトを使うことにより、関数内で関数の引数を参照できます。このオブジェクトは、関数に渡された各引数に対する入力を含みます。最初の入力の添え字は 0 から始まります。</p>
+
+<p>たとえば、もし関数に 3 つの引数が渡されたなら、次のようにその引数を参照できます。</p>
+
+<pre class="brush: js notranslate">arguments[0] // 1 番目の引数
+arguments[1] // 2 番目の引数
+arguments[2] // 3 番目の引数
+</pre>
+
+<p>引数を設定したり再代入したりすることもできます。</p>
+
+<pre class="brush: js notranslate">arguments[1] = 'new value';
+</pre>
+
+<p><code>arguments</code> オブジェクトは {{jsxref("Array")}} ではありません。似ていますが、 <code>Array</code> のプロパティは {{jsxref("Array.length", "length")}} 以外ありません。たとえば、 {{jsxref("Array.pop", "pop()")}} メソッドはありません。</p>
+
+<p>しかしながら、本当の <code>Array</code> に変換することはできます。</p>
+
+<pre class="brush: js notranslate">var args = Array.prototype.slice.call(arguments);
+// 配列リテラルを使用すると上記よりも短くなりますが、空の配列を作成します
+var args = [].slice.call(arguments);
+</pre>
+
+<p><code>arguments</code> に限らず、配列様オブジェクトは ES2015 の {{jsxref("Array.from()")}} メソッドや<a href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_operator">スプレッド構文</a>によって、本当の配列に変換することができます。</p>
+
+<pre class="brush: js notranslate">var args = Array.from(arguments);
+var args = [...arguments];
+</pre>
+
+<p><code>arguments</code> オブジェクトは、あらかじめ定義された引数の数よりも多くの引数で呼び出される関数に便利です。このテクニックは <code><a href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/min">Math.min()</a></code> などの 可変数の引数を受け入れる関数に便利です。この例の関数は、任意の数の文字列が引数で、引数の中で一番長い文字列を返します。</p>
+
+<pre class="brush: js notranslate">function longestString() {
+ var longest = '';
+ for (var i=0; i &lt; arguments.length; i++) {
+ if (arguments[i].length &gt; longest.length) {
+ longest = arguments[i];
+ }
+ }
+ return longest;
+}
+</pre>
+
+<p>呼び出された関数に渡された引数を数えるために {{jsxref("Functions/arguments/length", "arguments.length")}} を使用することができます。関数が受け取る引数を数えたいのであれば、関数の {{jsxref("Function.length", "length")}} プロパティを調べてください。</p>
+
+<h3 id="Using_typeof_with_Arguments" name="Using_typeof_with_Arguments">arguments に対する typeof の使用</h3>
+
+<p>{{jsxref("Operators/typeof", "typeof")}} 演算子を <code>arguments</code> に対して使用すると、 <code>'object'</code> が返されます。</p>
+
+<pre class="brush: js notranslate">console.log(typeof arguments); // 'object' </pre>
+
+<p>個々の引数の型は、 <code>arguments</code> に添字を使用して判断することができます。</p>
+
+<pre class="notranslate">console.log(typeof arguments[0]); // 最初の引数の型を返す</pre>
+
+<h2 id="Properties" name="Properties">プロパティ</h2>
+
+<dl>
+ <dt>{{jsxref("Functions/arguments/callee", "arguments.callee")}}</dt>
+ <dd>個の引数が所属する、現在実行中の関数を参照します。厳格モードでは禁止されています。</dd>
+ <dt>{{jsxref("Functions/arguments/length", "arguments.length")}}</dt>
+ <dd>関数に渡された引数の数を示します。</dd>
+ <dt>{{jsxref("Functions/arguments/@@iterator", "arguments[@@iterator]")}}</dt>
+ <dd>新しい {{jsxref("Array/@@iterator", "Array iterator", "", 0)}} オブジェクトで、 <code>arguments</code> のそれぞれの要素の値を含みます。</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">例</h2>
+
+<h3 id="Defining_a_function_that_concatenates_several_strings" name="Defining_a_function_that_concatenates_several_strings">複数の文字列を連結する関数を定義する</h3>
+
+<p>この例では、複数の文字列を連結する関数を定義します。この関数の唯一の仮引数は、連結する項目を区切る文字を指定する文字列です。この関数は次のように定義されます。</p>
+
+<pre class="brush:js notranslate">function myConcat(separator) {
+ let args = Array.prototype.slice.call(arguments, 1);
+ return args.join(separator);
+}</pre>
+
+<p>この関数へは好きな数だけ引数を渡すことができます。これはリスト中のそれぞれの引数を使用した文字列リストを返します。</p>
+
+<pre class="brush:js notranslate">// "red, orange, blue" を返します
+myConcat(', ', 'red', 'orange', 'blue');
+
+// "elephant; giraffe; lion; cheetah" を返します
+myConcat('; ', 'elephant', 'giraffe', 'lion', 'cheetah');
+
+// "sage. basil. oregano. pepper. parsley" を返します
+myConcat('. ', 'sage', 'basil', 'oregano', 'pepper', 'parsley');</pre>
+
+<h3 id="Defining_a_function_that_creates_HTML_lists" name="Defining_a_function_that_creates_HTML_lists">HTML のリストを作る関数の定義</h3>
+
+<p>この例では、リストのための HTML を含む文字列を作る関数を定義します。この関数の第 1 引数には、順不同リスト (中黒付き) なら "<code>u</code>"、順序リスト (番号付き) なら "<code>o</code>" を指定します。関数は次のように定義します。</p>
+
+<pre class="brush:js notranslate">function list(type) {
+ var html = '&lt;' + type + 'l&gt;&lt;li&gt;';
+ var args = Array.prototype.slice.call(arguments, 1);
+ html += args.join('&lt;/li&gt;&lt;li&gt;');
+ html += '&lt;/li&gt;&lt;/' + type + 'l&gt;'; // end list
+ return html;
+}</pre>
+
+<p>この関数には任意の数の引数を渡すことができ、それぞれの引数を指定された型のリストに項目として追加します。例を示します。</p>
+
+<pre class="brush:js notranslate">var listHTML = list('u', 'One', 'Two', 'Three');
+
+/* listHTML の内容は以下のような文字列となります。
+"&lt;ul&gt;&lt;li&gt;One&lt;/li&gt;&lt;li&gt;Two&lt;/li&gt;&lt;li&gt;Three&lt;/li&gt;&lt;/ul&gt;"
+*/</pre>
+
+<h3 id="Rest_default_and_destructured_parameters" name="Rest_default_and_destructured_parameters">残余引数、デフォルト引数、分割引数</h3>
+
+<div>
+<p><code>arguments</code> オブジェクトを <a href="/ja/docs/Web/JavaScript/Reference/Functions/rest_parameters">残余</a>、<a href="/ja/docs/Web/JavaScript/Reference/Functions/Default_parameters">デフォルト</a>、<a href="/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">分割</a>引数と組み合わせて使用できます。</p>
+</div>
+
+<pre class="brush: js notranslate">function foo(...args) {
+ return args;
+}
+foo(1, 2, 3); // [1, 2, 3]
+</pre>
+
+<p>厳格モードのコードでは、残余引数、デフォルト引数、分割引数があっても <a href="/ja/docs/Web/JavaScript/Reference/Strict_mode#Making_eval_and_arguments_simpler"><code>arguments</code> オブジェクトの動作は変わりません</a>が、厳格モードでない場合は微妙な違いがあります。</p>
+
+<p>厳格モードでは、 <code>arguments</code> オブジェクトは関数に残余引数、デフォルト引数、分割引数が渡されたかどうかにかかわらず同じ動作をします。すなわち、関数の本体で変数に新しい値を代入しても、 <code>arguments</code> オブジェクトには影響しません。また、 <code>arguments</code> オブジェクトに新しい変数を代入しても、変数の値には影響ありません。</p>
+
+<div class="blockIndicator note">
+<p><strong>注:</strong> <code>"use strict";</code> ディレクティブを、残余引数、デフォルト引数、分割引数を受け付ける関数の本体に書くことはできません。そうすると、<a href="/en-US/docs/Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params">構文エラー</a>が発生します。</p>
+</div>
+
+<p>厳格モードでない関数で、単純な引数のみを渡した場合 (すなわち、残余引数、デフォルト引数、分割引数ではない場合)、関数の本体で変数の値を新しい値にすると、 <code>arguments</code> オブジェクトと同期します。</p>
+
+<pre class="brush: js notranslate">function func(a) {
+ arguments[0] = 99; // arguments[0] を更新すると a も更新される
+ console.log(a);
+}
+func(10); // 99
+</pre>
+
+<p>および</p>
+
+<pre class="brush: js notranslate">function func(a) {
+ a = 99; // a を更新すると arguments[0] も更新される
+ console.log(arguments[0]);
+}
+func(10); // 99
+</pre>
+
+<p>それに対して、厳格モードでない関数で、残余引数、デフォルト引数、分割引数が<strong>渡される</strong>と、関数の本体で引数の変数に新しい値が代入されても、 <code>arguments</code> オブジェクトと同期<strong>されません</strong>。複雑な引数を持つ厳格モードでない関数の <code>arguments</code> オブジェクトは、関数が呼び出されたときに関数に渡された値を<strong>常に反映します</strong> (これは、渡される変数の型に関係なく、すべての厳格モードの関数の場合と同じ動作です)。</p>
+
+<pre class="brush: js notranslate">function func(a = 55) {
+ arguments[0] = 99; // arguments[0] を更新しても a は更新されない
+ console.log(a);
+}
+func(10); // 10</pre>
+
+<p>および</p>
+
+<pre class="brush: js notranslate">function func(a = 55) {
+ a = 99; // a を更新しても arguments[0] は更新されない
+ console.log(arguments[0]);
+}
+func(10); // 10
+</pre>
+
+<p>および</p>
+
+<pre class="brush: js notranslate">// デフォルト引数は追跡されません。
+function func(a = 55) {
+ console.log(arguments[0]);
+}
+func(); // undefined</pre>
+
+<h2 id="Specifications" name="Specifications">仕様書</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">仕様書</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>
+
+<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div>
+
+<p>{{Compat("javascript.functions.arguments")}}</p>
+
+<h2 id="See_also" name="See_also">関連情報</h2>
+
+<ul>
+ <li>{{JSxRef("Function")}}</li>
+ <li><a href="/ja/docs/Web/JavaScript/Reference/Functions/rest_parameters">残余引数</a></li>
+</ul>
diff --git a/files/ja/web/javascript/reference/functions/arguments/length/index.html b/files/ja/web/javascript/reference/functions/arguments/length/index.html
new file mode 100644
index 0000000000..cc8781a8c6
--- /dev/null
+++ b/files/ja/web/javascript/reference/functions/arguments/length/index.html
@@ -0,0 +1,124 @@
+---
+title: arguments.length
+slug: Web/JavaScript/Reference/Functions/arguments/length
+tags:
+ - arguments
+translation_of: Web/JavaScript/Reference/Functions/arguments/length
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<p><strong><code>arguments.length</code></strong> プロパティは、関数に渡された引数の数を含みます。</p>
+
+<h2 id="構文">構文</h2>
+
+<pre class="syntaxbox">arguments.length</pre>
+
+<h2 id="Description" name="Description">説明</h2>
+
+<p>The arguments.length プロパティは、実際に関数に渡された引数の数を提供します。これは、定義されたパラメーターの数以上にも以下にもできます({{jsxref("Function.length")}} を見てください)。</p>
+
+<h2 id="Examples" name="Examples">例</h2>
+
+<h3 id="arguments.length_を使用する"><code>arguments.length</code> を使用する</h3>
+
+<p>この例では、2 つ以上の数を加算する関数を定義しています。</p>
+
+<pre class="brush: js">function adder(base /*, n2, ... */) {
+ base = Number(base);
+ for (var i = 1; i &lt; arguments.length; i++) {
+ base += Number(arguments[i]);
+ }
+ return base;
+}
+</pre>
+
+<h2 id="仕様">仕様</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">仕様</th>
+ <th scope="col">ステータス</th>
+ <th scope="col">コメント</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>初期定義。JavaScript 1.1 で実装。</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="ブラウザ実装状況">ブラウザ実装状況</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>機能</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>基本サポート</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>機能</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>基本サポート</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="関連項目">関連項目</h2>
+
+<ul>
+ <li>{{jsxref("Function")}}</li>
+ <li>{{jsxref("Function.length")}}</li>
+</ul>