L'une des fonctionnalités introduites par ECMAScript 6 est la possibilité d'indiquer des valeurs par défaut pour des paramètres non spécifiés dans JavaScript, par ex.

function foo(a = 2, b = 3) {
    return a * b;
}

console.log(foo());   // 6
console.log(foo(5));  // 15

Maintenant, je me demande s'il est possible d'utiliser des paramètres par défaut également pour les fonctions créées dynamiquement avec le constructeur Function, comme ceci:

new Function('a = 2', 'b = 3', 'return a * b;');

Firefox 39 semble déjà prendre en charge les paramètres par défaut (voir ici), mais la ligne ci-dessus est rejetée comme une erreur de syntaxe.

5
GOTO 0 15 juil. 2015 à 14:40

3 réponses

Meilleure réponse

Maintenant, je me demande s'il est possible d'utiliser des paramètres par défaut également pour les fonctions créées dynamiquement avec le constructeur Function

Oui, selon la spécification, cela est possible. Les arguments des paramètres sont concaténés comme toujours, puis analysés en fonction de la production FormalParameters, qui inclut les valeurs par défaut.

Firefox 39 semble déjà prendre en charge les paramètres par défaut, mais la ligne ci-dessus est rejetée en tant qu'erreur de syntaxe.

Eh bien, c'est un bug :-) (probablement celui-ci)
Vous devriez pouvoir contourner ce problème en utilisant

var fn = Function('return function(a = 2, b = 3) { return a * b; }')();
1
Bergi 15 juil. 2015 à 16:45

Je ne sais pas si cela est censé fonctionner - quelqu'un d'autre devra vous le dire - mais si cela continue d'être un problème, pourquoi ne pas utiliser eval ()?

Quelque chose dans les lignes à ce sujet devrait être légal:

var fct1 = eval("(function foo(a = 2, b = 3) { return a * b; })")
0
citywall 15 juil. 2015 à 11:53

Comme new Function est une forme d'évaluation de toute façon, vous pouvez utiliser le code suivant pour cette tâche:

eval('function bar (a = 2, b = 3) { return a * b; }');
0
Florian Wendelborn 15 juil. 2015 à 11:52