Il m'est arrivé de trouver utile d'attribuer des propriétés aux fonctions avant de les transmettre comme arguments à d'autres fonctions.
Cela ressemblait à ceci (désolé pour toute confusion entre les fonctions anonymes et les objets de fonction assignés à une variable, je pense que ce n'est pas la même chose) :
"(could strict mode have something to do with this?)"
var funcOne = function(arg1, arg2) { return arg1 + arg2; };
funcOne.process = true;
var funcTwo = function(arg1, arg2) { return arg1 + arg2; };
funcTwo.process = false;
var procFunc = function(argFunc) {
if (argFunc.process) {
return argFunc(1,2);
}
return "not processed"
}
procFunc(funcOne); // 3
procFunc(funcTwo); // "not processed"
Je voudrais déclarer une fonction anonyme et lui attribuer simultanément des propriétés de sorte que, lorsqu'elle est appelée ultérieurement dans le cadre d'une pile de tableaux de fonctions, le code conditionnel puisse dépendre de la propriété.
Quelque chose comme :
"(could strict mode have something to do with this?)"
var funcOne = function(arg1, arg2) { return arg1 + arg2; }.process = true;
var funcTwo = function(arg1, arg2) { return arg1 + arg2; }.process = false;
var procFunc = function(argFunc) {
if (argFunc.process) {
return argFunc(1,2);
}
return "not processed"
}
procFunc(funcOne); // "not processed"
procFunc(funcTwo); // "not processed"
L'inattendu "not processed" est dû au fait que, de manière confuse, JavaScript assigne en fait les valeurs "true" et "false" aux variables funcOne et Two, et il n'envoie pas d'erreur lorsque la conditionnelle if (argFunc.process)
est évaluée (indépendamment, comme je le suppose, du "mode strict").
J'ai réussi à faire fonctionner cette fonction de manière anonyme en utilisant un IIFE qui assigne la fonction 'anonyme' à une variable, puis assigne la propriété à cette variable et renvoie cette variable hors de l'IIFE, mais j'espérais qu'il existait une syntaxe JavaScript pour cela ou simplement une meilleure méthode, peut-être.
À mon sens, l'affectation de la propriété du point que j'ai essayé n'a pas de sens. Et si le programmeur voulait attribuer plusieurs propriétés à la fonction anonyme ?
J'ai eu un espoir de courte durée avec var funcOne = function (arg1, arg2) { return arg1 + arg2; } = { process: true };
mais cela jette un SyntaxError: Invalid left-hand side in assignment
.