引数の定義
すべての関数には、関数が宣言されたときに定義されたパラメーターリストに制限されることなく、実際に受信するパラメーターを保存するための独自の引数オブジェクトがあります。それは配列ではありませんが、配列に似ています。アレイと同じアクセスプロパティとメソッドがあります。引数[n]によって対応する単一パラメーターの値にアクセスし、配列長属性の長さを持つことができます。しかし、配列がない方法がいくつかあります。コールを介して引数を実際の配列に変換してから、配列操作を実行できます。
var args = array.prototype.slice.call(arguments);
クラスアレイ
1.引数が配列であるかどうかを判断します
アラート(アレイの引数Instance); Alert(objectofの引数Instance);
2。データが配列(配列)クラスのインスタンスであることを厳密に判断する方法
function isarray(value){if(typeof array.isarray === "function"){return array.isarray(value); } else {return object.prototype.tostring.call(value)=== "[object array]"; }}3.引数を配列に変換します
方法1:組み込みのタイプは、プロトタイプを通じて見つけることができます。 array.prototype.sliceは、配列にアクセスするための組み込みメソッドスライスです。スライスメソッドを介して配列を返します。呼び出しは、オブジェクトを呼び出し、現在のオブジェクトを別のオブジェクトに置き換えるメソッドです。
var arg = array.prototype.slice.call(arguments、0);
方法2:パフォーマンスは、最初に配列を作成してから進行するため、方法1よりも悪いです。
var arg = [] .slice.call(arguments、0);
方法3:ループを介して配列に変換します
function toArray(引数){var a = []; for(var i = 0; i <arguments.length; i ++){a.unshift(arguments。[i]); } return a;}発信者
関数が別の関数によって呼び出されると、呼び出された関数は発信者属性を自動的に生成し、それを呼び出す関数オブジェクトを指します。関数が呼び出されない場合、発信者はnullです。
function testcaller(){var caller = testcaller.caller; alert(caller);} function acaller(){testcaller();} acaller();ポップアップするのは、関数Acallerのコンテンツです。
arguments.callee
arguments.calleeは、実行機能自体を指し、実行される関数オブジェクト、つまり指定された関数オブジェクトの本体を返します。
注:arguments.lengthは実際のパラメーターの長さ、arguments.callee.lengthは正式なパラメーターの長さであり、通常、実際のパラメーターの長さが一貫しているかどうかを判断するために使用されます。
引数を使用して関数の実際のパラメーターを取得し、引数を使用して関数の正式なパラメーターを取得します。Callee。
閉鎖にも広く使用されています。
var i = 0;関数B(num){if(num <10){num ++; i ++; //パラメーターがある場合、Calleeもパラメーターを持参する必要があります。 arguments.callee(num); } else {// output 2 alert( "The Call"+i+"Callee!"); }} b(8);閉鎖中のarguments.calleeの適用は、再帰的に呼び出しの関数を提供します。 // arguments.calleeを使用して10の要因を計算します。たとえば、1×2×3×4×5×6×7 .... function c(x){return x> 1? x * arguments.callee(x -1):1}(10); //出力6アラート(c(3)); //出力3628800アラート(c(10));例:Calleeは1-nの合計を見つけます
関数fn(n){if(n == 1)return n;それ以外の場合は、n+arguments.callee(n-1);}を返します匿名関数がそれ自体を呼び出すことができます
例:
function list(type){var result = "<"+type+"l> <li>"; var args = array.prototype.slice.call(arguments、1); result += args.join( "</li> <li>"); result+= "</li> </"+type+"l>"; return result;} var listhttml = list( "o"、 "one"、 "2"); console.log(listhtml);例2:インタビューの質問:次のConsole.log結果[1,2,3,4]は何ですか?
function foo(x){console.log(arguments); return x;} foo(1,2,3,4); function foo(x){console.log(arguments); x;}(1,2,3,4)を返す実験前に、関数fn(){}(1);個別に処理され、2つの関数に分割されます。1つ目は関数fn(){}、2つ目は匿名関数です:(1)。 2番目のものにパラメーターがない場合、エラーが報告されますが、上記の関数は()に含まれています。これは正しいです。
(function fn(){console.log(arguments);}(1,2,3,4))