Maison > interface Web > js tutoriel > Quelle est la différence entre la fonction.Call et Function.Apply?

Quelle est la différence entre la fonction.Call et Function.Apply?

Jennifer Aniston
Libérer: 2025-03-10 00:48:08
original
958 Les gens l'ont consulté

Quelle est la différence entre la fonction.Call et Function.Apply?

Quelle est la différence entre la fonction.Call et Function.Apply? Aujourd'hui, j'ai lu un excellent article de blog de Mark Needham intitulé javascript: déroutant «appel» et «appliquer» . Il y a quelque temps, j'ai écrit un article pour notre newsletter Tech Times sur l'objet JavaScript Arguments. Cela s'appelait des arguments: une bizarrerie javascript. Parce qu'il a toutes sortes de comportements intéressants qui sont utiles à connaître. J'ai réalisé que même si j'avais utilisé à la fois l'appel et postuler Dans cet article, je n'avais pas parlé de la différence. Eh bien, c'est en fait assez simple. Tout d'abord, les deux méthodes attendent un thisarg comme premier argument. C'est l'argument qui donne à la fonction un contexte; Il détermine la valeur du mot clé JavaScript ceci à l'intérieur de la fonction qui est appelée ou appliquée. La différence unique est que la méthode d'appel exige que les arguments soient spécifiés séparément; La méthode d'application les prend comme un tableau. C'est plus clair si vous voyez la syntaxe:
function.call(thisArg[, argument1[, argument2[, ...]]]);
Copier après la connexion
function.apply(thisArg[, argumentArray]);
Copier après la connexion
Donc, si vous travaillez avec l'objet Arguments dans votre JavaScript, vous pouvez appeler n'importe quelle fonction en utilisant la méthode Appliquer et simplement transmettre l'objet Arguments existant comme argument Array. J'espère que cela vous est utile! Image de fonctions par Sudhamshu. Pouvez-vous déterminer la signification?

Les questions fréquemment posées (FAQ) sur les appels de fonction et la fonction s'appliquent en javascript

Quelle est la principale différence entre l'appel de fonction et la fonction s'applique dans JavaScript?

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.

pouvez-vous fournir un exemple d'utilisation de la fonction et de la fonction s'appliquer?

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.

Quand dois-je utiliser la fonction de fonction sur la fonction sur la fonction, et vice versa?

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.

Puis-je utiliser la fonction Call et Fonction s'appliquer avec les fonctions du constructeur?

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.

Quelle est la valeur «cette» valeur de la fonction et de la fonction s'appliquent?

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).

Puis-je utiliser la fonction des appels et de la fonction s'appliquer avec les fonctions Arrow?

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.

Quelle est la différence de performance entre l'appel de la fonction et la fonction s'applique?

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.

Puis-je utiliser l'appel de la fonction et la fonction s'appliquer avec des fonctions javascript intégrées?

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.

Que se passe-t-il si je passe trop ou trop peu d'arguments pour fonctionner, les appels ou la fonction s'appliquent?

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.

sont des méthodes d'appel et de fonction Fonction, disponibles dans tous les environnements JavaScript?

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!

Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal