Maison > Article > interface Web > Analyse de la différence entre l'appelé et l'appelant dans les compétences javascript_javascript
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.