可変長パラメータを実現するJavaScriptの引数の説明。
C#では可変長パラメータparams[]がありますが、JSではこの可変長パラメータをどのように実装するのでしょうか?
1. 可変長パラメータ
引数は、JavaScript にこれがあるとは知りませんでした。
まず、引数を使用して任意の数のパラメーターを js 関数に渡すアプリケーション シナリオを見てみましょう。
function Test() { console.log(arguments[0]); console.log(arguments[1]); console.log(arguments[2]); }; Test(1, 2, 3);
Output 1 2 3;
もちろん、JavaScript 関数に配列を入れることもできますが、配列は固定長です。
2. 引数オブジェクトを直接変更しないでください。
引数オブジェクトは配列に似ていますが、実際には配列ではありません。call メソッドを使用して、配列のシフト関数を使用することもできます。議論を変えようとしないこと。混乱を招きやすいのです。
本当に変更したい場合は、引数の内容を新しい配列にコピーし、新しい配列上で変更することができます。
var args = [].slice.call(arguments);
引数を変数とバインドして関数間アクセスを実現します
arguments 変数は暗黙的に各関数本体にバインドされており、各関数内にあることに注意してください。
イテレータの例でこの問題を説明できます。
function values() { //values有自己的arguments var i = 0, n = arguments.length; return { hasNext: function () { return i < n; //hasNext 有自己的arguments }, next: function () { if(i >= n) { throw new Error("已经是最后一个元素!"); } return arguments[i++]; //next 有自己的arguments } } } var it = values(1, 2, 3, 4, 5, 6, 7); console.log(it.next()); //undefined console.log(it.next()); //undefined console.log(it.next()); //undefined
外部関数の引数にアクセスしたい場合は、ローカル変数バインディングを介して内部層でのみアクセスできます。りりー