function.call(thisArg[, argument1[, argument2[, ...]]]);
function.apply(thisArg[, argumentArray]);
La différence principale entre l'appel de fonction et la fonction s'applique dans JavaScript se trouve dans la façon dont les arguments sont transmis à la fonction. Avec la méthode Call (), vous transmettez des arguments individuellement, séparés par des virgules. D'un autre côté, la méthode applique () nécessite que les arguments soient passés en tant que tableau. Les deux méthodes vous permettent de contrôler la valeur de «ceci» dans la fonction, mais la façon dont vous transmettez des paramètres supplémentaires diffère.
Bien sûr, considérons une fonction simple qui ajoute deux nombres. En utilisant la méthode Call (), vous feriez quelque chose comme ceci:
Fonction Ajouter (a, b) {
Renvoie un b;
}
console.log (add.call (null, 1, 2)); // Sorties: 3
et en utilisant la méthode Apply (), il ressemblerait à ceci:
Fonction Ajouter (a, b) {
renvoie un b;
}
console.log (add.apply (null, [1, 2])); // Sorties: 3
Dans les deux cas, nous appelons la fonction ADD avec «ce» ensemble sur NULL (car il n'est pas utilisé dans cette fonction), et passant dans 1 et 2 comme arguments.
Le choix entre call () et appliquer () dépend de la façon dont vous souhaitez transmettre des arguments à la fonction. Si vous avez une liste d'arguments et que vous ne connaissez pas leur numéro à l'avance, postuler () peut être plus pratique car il faut un tableau. Si vous connaissez le nombre d'arguments, ou s'il n'y a aucun argument, Call () peut être plus simple à utiliser.
Oui, vous pouvez utiliser à la fois Call () et appliquer () avec des fonctions de constructeur. Cependant, vous devez être prudent lorsque vous utilisez Apply () avec des fonctions de constructeur qui attendent plusieurs arguments. Puisque appliquer () prend un tableau d'arguments, vous devez vous assurer que le tableau contient le nombre correct d'éléments.
Dans à la fois dans l'appel () et appliquer (), le premier argument que vous passez est la valeur qui doit être utilisée comme «ceci» dans la fonction. Cela vous permet de contrôler le contexte dans lequel la fonction est exécutée. Si vous passez NULL ou non défini comme premier argument, la fonction sera exécutée dans le contexte global (ou non défini en mode strict).
Bien que vous puissiez techniquement utiliser Call () et appliquer () avec des fonctions Arrow, c'est important à noter que les fonctions Arrow n'ont pas leur propre «valeur». Au lieu de cela, ils héritent de «ceci» de la portée environnante. Par conséquent, l'utilisation d'appel () ou appliquer () pour modifier la valeur «cette» d'une fonction fléchée n'aura aucun effet.
Dans la plupart des cas, la différence de performance entre Call () et appliquer () est négligeable et ne devrait pas être un facteur de décision. Cependant, si vous avez affaire à une fonction qui prend un grand nombre d'arguments, appliquer () pourrait être légèrement plus lent car il doit itérater sur le tableau d'arguments.
Oui, vous pouvez utiliser Call () et appliquer () avec des fonctions javascript intégrées. Cela peut être utile lorsque vous souhaitez utiliser une méthode qui existe sur un type d'objet avec un objet d'un type différent.
Si vous passez trop d'arguments pour appeler () ou appliquer (), les arguments supplémentaires seront simplement ignorés. Si vous passez trop peu d'arguments, les arguments manquants seront définis sur un non-défini.
Oui, les deux appels () et appliquez () font partie de la norme ecmascript et sont disponibles dans tous les environnements JavaScript modernes, y compris les navigateurs et le nœud.jscript
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!