関数内には、引数とこれの2つの特別な特性があります。引数は、渡されたすべてのパラメーターを含むクラスの配列オブジェクトです。
しかし、このオブジェクトには、Calleeと呼ばれるプロパティもあります。これは、引数オブジェクトを所有する関数へのポインターです。
古典的な要因関数の例を参照してください:
コードコピーは次のとおりです。
関数因子(num){
if(num <= 1){
返品1;
} それ以外 {
num * factorial(num -1)を返します。
}
}
関数因子(num){
if(num <= 1){
返品1;
} それ以外 {
num * arguments.callee(num -1)を返します。
}
}
最初の方法を使用することには何の問題もありませんが、結合は高すぎてあまり良くありません。関数名が変更された後、内部関数名も変更する必要があります。
2番目の方法は低カップリングです。関数名がどのように変更されても、関数の実行には影響しません。
これは、関数が実行される環境オブジェクトを指します。または、この値とも言えます。
コードコピーは次のとおりです。
window.color = "red";
var o = {color: "blue"};
関数sayscolor(){
アラート(this.color);
}
saycolor(); // red
o.saycolor = saycolor;
o.saycolor(); // blue
発信者属性は、現在の関数を呼び出す関数への参照を保持します。現在の関数がグローバル範囲で呼び出された場合、その値はヌルです
コードコピーは次のとおりです。
function outer(){
innter();
}
関数内(){
//alert(innter.caller);///カップリングが高すぎます
alert(arguments.callee.caller);
}
outer();
上記は、JavaScript関数の内部特性のすべての内容です。私はあなたがそれを好きになることを願っています