argments.callee,angments.caler用法
3046 ワード
argments.calleeはどの関数で動作しますか?どの関数を表しますか?匿名関数で使用されます.
針の働きをする
argments.callerは、本関数を呼び出す関数を指し、現在の関数を呼び出す関数の参照を保存しています.基本的には上位を探して本関数の関数を呼び出します.はどちらもポインタに相当し、argmentsの関数を指すが、calerは彼を呼び出した関数を指す. まず、argments.caleeを紹介します.書き換えるとangments.calleeの針が指す方向に直接影響を与えますので、0 に戻ります.
まず、argments.calee.callerを紹介します.
針の働きをする
argments.callerは、本関数を呼び出す関数を指し、現在の関数を呼び出す関数の参照を保存しています.基本的には上位を探して本関数の関数を呼び出します.
(function(n){
console.log(n); //10,9,8,7,6,5,4.3,2,1
if(n>1){
// var sum=n*arguments.callee(n-1);
return n*arguments.callee(n-1);
}
return n;
})(10);
//1
自身を呼び出して階乗を実現しました.jsの高速道路の例を参照すると、より理解できます.function fac(num){
if(num<=1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
var fa=fac;
console.log(fa(5)); //120
fac=function(){
return 0;
}
console.log(fa(5)); //0
まず、argments.calee.callerを紹介します.
function two(){
inner();
}
function inner(){
console.log(inner.caller);
}
inner(); ==>
// function two(){
// inner();
// }
これは関数自体でコールしたcalerです.実はinner()関数を呼び出しましたが、innerの参照関数two()を出力しました.function outer(){
inner();
}
function inner(){
console.log(arguments.callee.caller);
}
実は最終目的は直接関数自体の代わりに発生するトラブルです.