Maison >interface Web >js tutoriel >`call()` vs `apply()` : quand utiliser quelle méthode d'invocation de fonction ?

`call()` vs `apply()` : quand utiliser quelle méthode d'invocation de fonction ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-14 07:16:14964parcourir

`call()` vs. `apply()`: When to Use Which Function Invocation Method?

Invocation de fonction avec appel et application

Lors de l'appel de fonctions, les programmeurs rencontrent souvent les options d'utilisation de Function.prototype.apply() ou Function .prototype.call(). Cet article explore les distinctions et les cas d'utilisation des deux méthodes.

apply() vs. call()

La différence fondamentale réside dans la façon dont elles gèrent les arguments de fonction :

  • apply() : accepte les arguments en tant que array.
  • call() : Nécessite que les arguments soient répertoriés explicitement, séparés par des virgules.

Syntaxe

Method Syntax
apply() function.apply(thisArg, [arg1, arg2, ...])
call() function.call(thisArg, arg1, arg2, ...)

Mnémoniques

Pour se souvenir du différence :

  • A pour tableau : apply() prend un tableau d'arguments.
  • C pour virgule : call() nécessite arguments séparés par des virgules.

Utilisez Cas

  • call() : Utile lors du passage d'un nombre spécifique d'arguments.
  • apply() : Idéal pour scénarios dans lesquels les arguments sont déjà stockés dans un tableau ou nécessitent une liaison dynamique.

Performance Considérations

Les deux méthodes ont des caractéristiques de performance similaires. Dans ES6 et versions ultérieures, l'opérateur spread (...) peut être utilisé avec call(), offrant une alternative plus concise à apply().

Exemple

Considérons la fonction suivante :

function greet(name, occupation) {
  console.log(`Hello, my name is ${name} and I'm a ${occupation}.`);
}

Invoquer la fonction à l'aide de apply() et call() :

greet.apply(undefined, ["John", "engineer"]);
greet.call(undefined, "Mary", "doctor");

Cela permettra sortie :

Hello, my name is John and I'm a engineer.
Hello, my name is Mary and I'm a doctor.

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:
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