Compte tenu de cet exemple Javascript que j'ai trouvé
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
Quel avantage y a-t-il à assigner une fonction à un var?
javascript
octopusgrabbus
la source
la source
Réponses:
La réponse courte, je crois, est simplement que vous créez une fonction anonyme affectée à une variable, par opposition à la création d'une fonction nommée avec ...
Un bon moyen de vérifier les différences est d'appeler .ToString () sur eux et de voir la différence ou vous pouvez faire console.log (sum.name). L'un donnera un nom réel et l'autre rien, à savoir la fonction anonyme (celle attribuée à la var). Il y a aussi des spécificités, comme la var sum = function () {} est définie au moment de l'exécution et la fonction sum () {} est définie au moment de l'analyse.
la source
Un avantage est que vous ne pouvez pas utiliser une déclaration de fonction dans un bloc. Ils ne peuvent se trouver qu'au niveau supérieur d'un fichier ou directement dans une autre fonction.
Ceux-ci ne sont pas tous spécifiés par la norme et les navigateurs font des choses différentes, voir /programming/10069204/function-declarations-inside-if-else-statements . Donc, si vous devez parfois utiliser l'autre style, pour des raisons de cohérence, vous pouvez toujours le faire
De plus, je ne suis pas sûr de celui-ci, mais si je me souviens bien, certains anciens minificateurs n'étaient pas assez intelligents pour gérer les déclarations de fonctions et ne les renomment pas.
la source
Je ne suis pas un expert Javascript, alors prenez ceci avec un grain de sel. Je pense que dans certains cas, les gens pourraient le faire pour le style et la même chose pourrait être réalisée en écrivant simplement "function sum () {...}"
Cependant, assigner une fonction à une variable est une technique très puissante en programmation fonctionnelle. Si vous connaissez la POO, elle est quelque peu similaire au polymorphisme. Pensez à l'exemple classique de la classe de base animale et des classes dérivées chat / chien. Vous pouvez écrire du code qui fonctionne avec Animal mais quand il appelle une fonction, cette fonction peut faire un travail différent selon le type d'une instance.
En programmation fonctionnelle, vous pourriez avoir un algorithme qui fonctionne avec "une fonction" mais si vous utilisez une variable pour appeler cette fonction, vous avez la possibilité d'affecter une fonction différente au moment de l'exécution.
Par exemple, supposons que vous écriviez un algorithme pour présenter 10 000 points de données dans une fenêtre de 500 pixels seulement. Chaque pixel représentera alors 20 points de données et afin de les présenter, vous devez agréger ces 20 points de données en une seule valeur.
Supposons donc que vous définissiez un algorithme pour présenter les 10 000 points et que cet algorithme utilise une variable de fonction appelée agrégat comme ceci:
Désormais, au moment de l'exécution, votre utilisateur peut sélectionner le mode d'agrégation des données. Votre variable de fonction réelle peut être l'une des suivantes:
la source
C'est surtout une question de style, car les seules situations où la différence apparaît (appeler certaines des fonctions avant de mettre fin à toutes les déclarations; en utilisant la méthode toString) sont à mon avis des cas de coin.
L'un des arguments que j'ai entendu à l'appui de ce
var =
style est qu'il est cohérent avec la façon dont vous déclarez les variables normales. Cela limite le nombre de fonctionnalités de langage que vous utilisez et simplifie la production de votre programme à quelqu'un de nouveau pour Javascript.la source