angerufen
callee ist ein Attribut des Objekts, das ein Zeiger ist, der auf die Funktion des Argumentobjekts
zeigt
Schreiben wir zunächst eine Bestellfunktion:
function chen(x){
if (x<=1) {
return 1;
} else{
return x*chen(x-1);
};
};
Nach dem Login kopieren
Wie aus dieser Funktion hervorgeht, wird eine rekursive Funktion verwendet. Wenn der Funktionsname geändert wird, ändert sich auch der darin enthaltene Funktionsname. Dies ist sehr unpraktisch, daher verwenden wir callee, um es zu versuchen
function chen(x){
if (x<=1) {return 1;
}else{
return x*arguments.callee(x-1);
};
};
Nach dem Login kopieren
Lassen Sie uns analysieren, warum es so geschrieben ist: Gemäß der Definition von Callee ist es ersichtlich, dass Callee ein Attribut des Arguments-Objekts ist und auf eine Funktion des Arguments-Objekts verweist. Diese Funktion ist chen (chen=arguments .callee). Diese Erklärung sollte verständlich sein.
Anrufer
Aufrufer ist ein Attribut des Funktionsobjekts, das einen Verweis auf die Funktion enthält, die die aktuelle Funktion aufruft (und auf die direkte übergeordnete Funktion der aktuellen Funktion zeigt)
Nehmen wir zunächst ein Beispiel
function a(){
b();
};
function b(){
alert(b.caller);
};
a(); //结果就是弹出函数a和内容
Nach dem Login kopieren
Lass es uns erklären. Zuerst ruft der Attributaufrufer der Funktion b die Funktionsreferenz a der aktuellen Funktion b auf (die auf die übergeordnete Funktion a der aktuellen Funktion b zeigt), also ist das Ergebnis diese Funktion a(){ b();}; erscheint;
Da Sie nun „Anrufer“ und „Angerufener“ verstanden haben, können Sie die beiden kombinieren, um sie zu verwenden?
function b(){
alert(b.caller);
};
Nach dem Login kopieren
Aus diesem Code können wir ersehen, dass der b-Funktionsname in der b-Funktion aufgerufen wird. Dies ist sehr unpraktisch, wenn sich der b-Funktionsname ändert.
Bisher wussten wir, wie man auf das aktuelle Objekt zeigt. Als nächstes ändern wir es:
(function a(){
b();
})();
function b(){
alert(arguments.callee.caller);
};
Nach dem Login kopieren
Wie aus dem Code hervorgeht, haben wir die b-Funktion durch arguments.callee ersetzt, sodass das Problem behoben war. . . . .
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er gefällt Ihnen allen.