1. appelant
Renvoie une référence à la fonction qui appelle la fonction actuelle.
functionname.Caller
L'objet FunctionName est le nom de la fonction exécutée.
illustrer
Pour les fonctions, l'attribut de l'appelant n'est défini que lorsque la fonction est exécutée. Si la fonction est appelée par le niveau supérieur d'un programme JavaScript, alors l'appelant contient null.
L'exemple suivant illustre l'utilisation de l'attribut de l'appelant:
La copie de code est la suivante:
fonction callerdemo () {
if (arguments.Caller) {
var a = callerdemo.caller.toString ();
alerte (a);
} autre {
alert ("Ceci est une fonction supérieure");
}
}
fonction handlecaller () {
appelerDemo ();
}
handlecaller ();
fonction calleedemo () {
alerte (arguments.callee);
}
CalleeDemo ();
2. Callee
Renvoie l'objet de fonction exécuté, c'est-à-dire le corps de l'objet de fonction spécifié.
[Fonction.] Arguments.Callee
Le paramètre de fonction facultatif est le nom de l'objet de fonction qui s'exécute actuellement.
illustrer
La valeur initiale de la propriété CALLEE est l'objet de fonction exécuté.
La propriété Callee est un membre de l'objet Arguments, qui représente une référence à l'objet de fonction lui-même, qui est propice à la récursivité des fonctions anonymes ou pour assurer l'encapsulation de la fonction. Par exemple, le calcul récursif de la somme des nombres naturels de 1 à n dans l'exemple suivant. Cette propriété n'est disponible que lorsque la fonction pertinente est en cours d'exécution. Il est également important de noter que Callee a l'attribut de longueur, ce qui est parfois meilleur pour la vérification. Arguments.Length est la longueur du paramètre réel, et arguments.Callee.Length est la longueur du paramètre formel. Cela peut être utilisé pour déterminer si la longueur du paramètre formel est cohérente avec la longueur du paramètre réel lors de l'appel.
Exemple
La copie de code est la suivante:
// Callee peut s'imprimer
fonction calleedemo () {
alerte (arguments.callee);
}
// utilisé pour vérifier les paramètres
fonction CalleElngthDemo (Arg1, Arg2) {
if (arguments.length == arguments.callee.length) {
Window.Alert ("Vérifiez que les paramètres formels et les paramètres réels sont corrects!");
retour;
} autre {
alert ("la longueur de l'argument réel:" + arguments.length);
alert ("Longueur de taille:" + arguments.Callee.Length);
}
}
// calcul récursif
var sum = fonction (n) {
if (n <= 0)
retour 1;
autre
retour n + arguments.Callee (n - 1)
}
Une fonction récursive plus générale:
La copie de code est la suivante:
var sum = fonction (n) {
if (1 == n) retour 1;
else return n + sum (n-1);
Lorsqu'il est appelé: alerte (somme (100));
La fonction contient une référence à la somme elle-même. Le nom de la fonction n'est qu'un nom de variable. Appeler la somme à l'intérieur de la fonction équivaut à appeler
Une variable globale ne peut pas être bien reflétée dans l'appel lui-même, et l'utilisation de Callee sera une meilleure méthode pour le moment.