Maison  >  Article  >  interface Web  >  Analyse de la différence entre l'appelé et l'appelant dans les compétences javascript_javascript

Analyse de la différence entre l'appelé et l'appelant dans les compétences javascript_javascript

WBOY
WBOYoriginal
2016-05-16 16:03:131117parcourir

appelée

l'appelé est un attribut de l'objet, qui est un pointeur pointant vers la fonction de l'objet arguments
Tout d’abord, écrivons une fonction de commande :

function chen(x){
if (x<=1) {
return 1;
} else{
return x*chen(x-1);
};
};

Comme le montre cette fonction, une fonction récursive est utilisée. Si le nom de la fonction est modifié, le nom de la fonction à l'intérieur changera également, c'est très gênant, nous utilisons donc l'appelé pour l'essayer
.

function chen(x){
if (x<=1) {return 1;
}else{
return x*arguments.callee(x-1);
};
};

Analysons pourquoi c'est écrit comme ceci : D'après la définition de l'appelé, on peut voir que l'appelé est un attribut de l'objet arguments et pointe vers une fonction de l'objet arguments. Cette fonction est chen (chen=arguments. .callee). Cette explication devrait être compréhensible.

appelant

l'appelant est un attribut de l'objet fonction, qui contient une référence à la fonction qui appelle la fonction actuelle (pointant vers la fonction parent directe de la fonction actuelle)

Prenons d'abord un exemple

function a(){
b();
};
function b(){
alert(b.caller);
};
a(); //结果就是弹出函数a和内容

Expliquons-le. Tout d'abord, l'appelant d'attribut de la fonction b appelle la référence de fonction a de la fonction actuelle b (qui pointe vers la fonction parent a de la fonction actuelle b), donc le résultat est cette fonction a(){ b();}; apparaît ;

Maintenant que vous comprenez l'appelant et l'appelé, pouvez-vous combiner les deux pour les utiliser ?

function b(){
alert(b.caller);
};

À partir de ce code, nous pouvons voir que le nom de la fonction b est appelé dans la fonction b. C'est très gênant lorsque le nom de la fonction change. Nous devons remplacer le b
. Auparavant nous savions pointer vers l'objet courant, modifions-le ensuite :

(function a(){
b();
})();

function b(){
alert(arguments.callee.caller);
};

Comme le montre le code, nous avons remplacé la fonction b par arguments.callee, le problème a donc été résolu. . . . .

Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn