bonjour à tous,
la question bête du jour :weird:, et purement théorique.
combien de paramètres peut on faire passer dans un fonction, y'a t'il une limite ?
Code:function maFonction(param1, param2, .....){}
Version imprimable
bonjour à tous,
la question bête du jour :weird:, et purement théorique.
combien de paramètres peut on faire passer dans un fonction, y'a t'il une limite ?
Code:function maFonction(param1, param2, .....){}
En théorie, pas de limites : http://es5.github.io/#x8.8
En pratique, cette limite dépend de l'implémentation.
Et du bon sens ! :aie:Citation:
En pratique, cette limite dépend de l'implémentation.
Oui en général on en met pas trop (rarement au delà de cinq/six) pour une meilleure lisibilité/facilité d'utilisation.
Après rien ne t'empêche de passer un tableau comme paramètre, ou d'utiliser prototype pour partager proprement (proprement par rapport aux variables globales) certaines variables dans différentes fonctions ce qui évite d'avoir besoin de les passer en paramètre.
Donc en fait pratiquement ta question ne se pose pas vraiment car il y a toujours mieux à faire que de passer une ribambelle de paramètres dans une fonction.
Pour des raisons de lisibilité, il n'est pas conseillé qu'une fonction accepte trop de paramètres.
Il est par exemple préférable de regrouper les paramètres appartenant à un même domaine dans des objets {...} pour limiter le nombre de paramètres d'un point de vue lexical.
Je ne sais pas si ce test est tout à fait exact, mais j'arrive à une limite sur Chrome d'environ 4 milliards d'arguments. On est large.Code:var n=10, f=function(){}; try { while(true){ n=Math.floor(n*1.1); f.apply(new Array(n)); console.log(n); } } catch(e){}
Je pense que vous êtes plutôt en train de tester la capacité de apply() ou la capacité de Array()
J'aurais plutôt vu quelque chose comme :
Code:
1
2
3
4
5
6
7 function test() {} var args = 0; for (var i = 1; i < 32; i++) { args = (args << 1) + 1; console.log(args); new Function("return test(" + Array(args).join("1,").slice(0,-1) + ")")(); }
Et Chrome s’arrête avec ce message : Uncaught SyntaxError: Too many arguments in function call (only 65535 allowed)
D'après http://es5.github.io/#x15.4.5.1, la longueur d'un tableau est un entier non signé de 32 bits (ToUint32), soit 232-1 = 4,294,967,295 = 4.29 milliards d'éléments dans un tableau.
Oui, il doit y avoir deux limites, une pour l'écriture littérale des déclarations de fonctions fixée à 65535 et une autre plus théorie sur la longueur de l'Array arguments.
Whouhouuuuuuu :yaisse3:
:dehors:Code:f=function(){};for(s=1;;)eval('f('+(s+=','+s+',1')+')')
Je me disais bien qu'on devait pouvoir faire ça avec eval ;)
Comme quoi, elle était pas si bête ma question.
4 Milliards d'arguments, ça ne fait pas un peu juste ?????? ........... :aie:
Ne vous trompez pas.
La limite de 4 milliards est celle du nombre d'éléments que peut contenir un tableau, selon le document de référence du langage (http://es5.github.io/#x15.4.5.1). C'est la limite théorique. En pratique, cette limite peut ne pas être atteinte, si le moteur javascript ne respecte pas la norme, ou si la mémoire allouée à ce même moteur n'est pas suffisante, etc.
Pour votre question initiale, à savoir combien de paramètres peut-t-on soumettre à une fonction. La réponse théorique est : "il n'y a pas de limite", comme le précise le document de référence du langage (http://es5.github.io/#x8.8). La réponse pratique est "ça dépend de la manière dont le moteur javascript a été implémenté". Pour Chrome, nous avons trouvé 65535. Cela peut être différent dans les autres navigateurs.
En attendant, celui qui m'écrit une fonction à 65535 paramètres je jure de trouver où il habite et de venir chez lui toutes les nuits pendant un an pour l'empêcher de dormir en lui chantant du Carlos.
Y'a pas de question bête, mais quand on développe c'est un problème qui ne se pose pas parce que justement pour des raisons pratiques on évite de mettre beaucoup d'arguments. Pour dire que quand bien même tu aurais une réponse exacte au final on s'en tape un peu, c'est pas cela qui va te limiter ni te faire avancer ;)
Et moi, je jure de venir avec toi pour t'accompagner à l'accordéon ! :ccool:Citation:
Envoyé par Watilin
Question subsidiaire : si les 65535 paramètres sont des tableaux à 4 milliards d'entrées, il y a un tarif préférentiel ? :mrgreen:
visiblement réaliser des scripts javascript en un tweet ça t'a marqué :aie: :aie: