1. 引数とは
引数は JavaScript の組み込みオブジェクトであり、奇妙で見落とされがちですが、実際には非常に重要です。すべての主要な JavaScript ライブラリは、arguments オブジェクトを利用します。したがって、agruments オブジェクトは JavaScript プログラマにとって馴染みのあるものでなければなりません。
すべての関数には独自の引数オブジェクトがあり、関数によって呼び出されるパラメータが含まれています。 typeof 引数が使用されている場合は、「object」が返されます。ただし、データを呼び出すメソッドを使用して引数を呼び出すことはできます。たとえば、長さとインデックスのメソッドです。ただし、配列のプッシュおよびポップ オブジェクトは適用できません。
2. 柔軟な関数を作成する
引数オブジェクトは用途が非常に限られているように見えますが、実は非常に便利なオブジェクトです。引数オブジェクトを使用すると、可変数の引数を使用して関数を呼び出すことができます。 Dean Edwards の Base2 ライブラリには、この柔軟性を示すフォーマット関数があります。
function format(string) {
var args =引数;
var pattern = new RegExp(“%([1-" argument.length "])”, ”g”);
return String(string).replace(pattern, function(match,index) {
引数[インデックス] を返す
});
};
テンプレート文字列が提供されています。「%1」から「%9」を使用して戻り値にプレースホルダーを追加できます。次に、他の 9 つのパラメータが挿入用に提供されます。
format(「そして、%1 は誰の % を知りたいと思っています2 you % 3″, “papers”, “shirt”, “wear”);
上記のコードは次のように返されます: そして、新聞はあなたが誰のシャツを着ているかを知りたがっています。
一つのことがあります。注意する必要があるのは、関数を定義するときは、引数オブジェクトがどのように定義されているかに関係なく、1 つのパラメーター (文字列) だけを指定することです。実数の配列に変換されます
引数オブジェクトは実際の JavaScript 配列ではありませんが、簡単に標準データに変換して配列操作を実行できます 🎜>
コードをコピー
コードは次のとおりです。
function makeFunc() {
var args = Array.prototype.slice.call(arguments); var func = args.shift(); function() {
return func.apply(null, args.concat(Array.prototype.slice.call(arguments)))
コードをコピーします
コードは次のとおりです。
var MajorTom = makeFunc(format, “これはトム少佐です地上管制へ。私は %1 です。」);
次のように MajorTom 関数を呼び出すことができます:
majorTom("stepping through the door");
majorTom("最も奇妙な方法で浮いている");
majorTom を呼び出すたびに、format 関数と最初の引数の両方が呼び出されます。書かれたテンプレート。次に、
「地上管制のトム少佐です」 「私はドアを通り抜けています。」
「これは地上管制のトム少佐です。私は最も奇妙な方法で浮かんでいます。」
5. それ自体を参照する関数を作成します
これは非常に奇妙だと思うかもしれませんが、この議論にはさらに驚きがあります。他にも callee メソッドという便利な機能があります。 Arguments.callee には、引数オブジェクトを作成する関数への参照が含まれています。では、どうやって使うのでしょうか?
Arguments.callee メソッドを使用すると、匿名関数がそれ自体を簡単に指すことができます。
Repeat は、関数参照と 2 つの数値を運ぶ関数です。最初の数値は関数が呼び出される回数で、2 番目の数値は各呼び出し間の時間 (ミリ秒単位) です。
functionrepeat(fn,times,lay){
return function () {
if(times– > 0) {
fn.apply(null, argument)
var args = Array.prototype.slice.call(arguments); var self = argument.callee
setTimeout(function(){self.apply(null,args)},
}
};
Repeat 関数は、arguments.callee メソッドを使用して変数 self から参照を取得し、元の命令を実行した関数を指します。こうすることで、匿名関数は自分自身を再度呼び出すことができます。
文字列を運び、alert メソッドを実行する非常に単純な関数があります。
コードをコピー
}
ただし、このアクションを 2 秒間隔で 3 回繰り返すことができる特別なバージョンを作成したいと考えています。次に、
コードをコピーします
somethingWrong 関数を呼び出した結果、アラートの間に 2 秒の間隔でこのアクションが 3 回繰り返されます。 。
引数はあまり使用されず、少し奇妙ですが、驚きに満ちており、理解する価値があります。