Heim  >  Artikel  >  Web-Frontend  >  Analyse des Unterschieds zwischen Angerufenem und Anrufer in den Javascript-Kenntnissen

Analyse des Unterschieds zwischen Angerufenem und Anrufer in den Javascript-Kenntnissen

WBOY
WBOYOriginal
2016-05-16 16:03:131117Durchsuche

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);
};
};

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);
};
};
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和内容
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);
};
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);
};

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.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn