ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript は引数を使用して可変長パラメータを実装します

JavaScript は引数を使用して可変長パラメータを実装します

高洛峰
高洛峰オリジナル
2017-01-04 17:28:491081ブラウズ

可変長パラメータを実現する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

外部関数の引数にアクセスしたい場合は、ローカル変数バインディングを介して内部層でのみアクセスできます。上記の例は

function values() {
 //values有自己的arguments
 var i = 0, n = arguments.length, ourterArgs = arguments;
 return {
  hasNext: function () {
   return i < n;  //hasNext 有自己的arguments
  },
  next: function () {
   if(i >= n)
   {
    throw new Error("已经是最后一个元素!");
   }
   return ourterArgs[i++];  //ourterArgs 外层保存的 arguments
  }
 }
}
  
var it = values(1, 2, 3, 4, 5, 6, 7);
console.log(it.next());  //1
console.log(it.next());  //2
console.log(it.next());  //3

に変換できます。以上がこの記事の全内容です。PHP 中国語 Web サイトをご利用いただきありがとうございます。

引数を使用して可変長パラメーターを実装する JavaScript 関連の記事については、PHP 中国語 Web サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。