argumentsが存在する。このargumentsを使うと、下記のように可変長引数関数を自作できる。26.5ただし上記の場合、引数に配列を使いたい場合はapplyメソッドを使わなければならず、クライアント側から使うのに面倒なケースがある。そこでお勧めされているのが、明示的に配列を受け取る「固定アリティ」関数と、「可変アリティ」の両方を提供することでクライアントの便宜をはかることができる。argumentsオブジェクトを書き換えないargumentsオブジェクトは配列のように見えるが、常に配列のように振る舞うとは限らない。arugmentsオブジェクトは標準Array型ではないため、例えばarguments.shift()を直接呼び出す事ができない。それでもcallメソッドを用いて配列のsliceメソッドを適用すると、標準Array型のインスタンスにコピーすることができる。argumentsへのリファレンスは変数に保存するiteratorの挙動を期待した関数をargumentsを用いて下記のように実装する。}}しかし、上記のコードは期待した結果を得られない。undefinedこれは、argumentsがit.next()の引数をアクセスしてしまっているからである。ネストした関数からargumentsを参照する場合は、values()メソッド内のローカル変数に結合しておく必要がある。固定レシーバを持つメソッドを抽出するにはbindを使う関数について、そのレシーバを特定のオブジェクトに結合(bind)するバージョンを作成する場合、ES5ではbindメソッドを用いればよい。普通に呼んでしまうとグローバルオブジェクトをレシーバーにしてしまうforEachメソッドに対し、bufferオブジェクトをレシーバにしたい場合は下記のように書く。hoge.forEach(buffer.add.bind(buffer));ただし、bindは新しいadd関数を作成するのであり、buffer.add関数を書き換えるわけではないとのこと。関数をカリー化するには、bindを使う下記のコードは、simpleURLメソッドに対し、paths.mapに無名関数を渡して反復処理させるコードである。"http"と"hoge"の文字列がどの繰り返しでも同じであり、本当に必要なのは3つ目のpath引数だけである。このようなケースの時、bindを用いてカリー化を行うと効率的に書ける。]通常のようにbindの第1引数はレシーバの値を提供する。今回の例ではsimpleURL関数がthisを参照しないため、nullかundefinedを使うのが通例となるとのこと。simpleURLに渡される引数は、simpleURL.bindの引数に新しい関数に対して提供された引数を連結したものになる。このように関数に対して、その引数の部分集合を結合させるテクニックはカリー化と呼ばれる。カリー化を使うと、関数の委任を明示的なラッパー関数を使うよりも決まり文句が少ない簡潔な方法で実装できる。(3)注目記事スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。