Comment rendre le paramètre de fonction constant en JavaScript?
Ce que je veux faire est d'utiliser autant de variables immuables que possible, réduisant ainsi le nombre de pièces mobiles dans mon code. Je veux utiliser "var" et "laisser" seulement quand c'est nécessaire.
Cela ne fonctionnera pas:
function constParam(const a){
alert('You want me to '+a+'!');
}
Des idées?
7 réponses
Les paramètres de la fonction resteront des liaisons mutables (comme var
) dans ES6, il n'y a rien que vous puissiez faire contre cela. Probablement la meilleure solution que vous obtenez est de déstructurer le arguments
objet dans une initialisation const
:
function hasConstantParameters(const a, const b, const c, …) { // not possible
…
}
function hasConstantParameters() {
const [a, b, c, …] = arguments;
…
}
Notez que cette fonction aura une arité différente (.length
), Si vous en avez besoin, vous devrez déclarer certains paramètres d'espace réservé.
Vous ne pouvez pas créer de paramètre const
. L'utiliser comme valeur initiale d'une variable locale:
function constParam(a) {
const const_a = a;
...
}
Notez également que const
n'est pris en charge que dans Internet Explorer depuis IE11. Voir ce tableau de compatibilité
C'est ce que je fais:
Au Lieu de:
function F(const a, const b, const c, const d, const e, const f, const g){ // Invalid Code
// lorem
// ipsum
}
..Utilisation:
function F(){const[a, b, c, d, e, f, g] = arguments;
// lorem
// ipsum
}
Il N'y a aucun moyen de forcer un paramètre à être immuable en JavaScript. Vous devez garder une trace de cela vous-même.
Écrivez simplement dans un style où vous ne mutez pas les variables. Le fait que la langue ne vous offre aucune facilité pour vous forcer à le faire ne signifie pas que vous ne pouvez toujours pas le faire de toute façon.
function wrapper(i){
const C=i
return new Function("a","b", "return a+b+"+C)
}
f100 = wrapper(100) //ƒ anonymous(a,b/*``*/) {return a+b+100}
f100(1,2) //OUTPUT 103
f200 = wrapper(200) //ƒ anonymous(a,b/*``*/) {return a+b+200}
f200(1,2) //OUTPUT 203
Pour les structures immuables, je crois que vous recherchez immuable.js .
Comme le dit @Andreas_Gnyp, JUSQU'à ES6 il n'y a pas let
/ const
en JavaScript. (Il n'y aura pas non plus function(const a) {...}
Une fois ES6 sorti et entièrement pris en charge.) Si vous voulez utiliser const
, Vous pouvez soit implémenter votre propre fonctionnalité const
, soit commencer à utiliser la notation ES6 avec l'aide d'un compilateur ES6-to-ES5 tiers, tel que Babel.
Cependant, gardez à l'esprit que const
dans ES6 la notation ne rend pas la variable immuable. Par exemple const a = [1, 2]; a.push(3);
est un programme complètement valide et {[8] } deviendra [1, 2, 3]
. const
seulement vous empêchera de réaffecter a
, de sorte que vous ne pouvez pas faire a = []
ou {[13] } ou autre chose une fois const a = [1, 2];
déjà défini (dans cette portée particulière).
function hasConstantParameters(...args) {
const [a, b] = args;
}
Immuable.js sera assurez-vous que, lorsque vous définissez var a = fromJS([1, 2]);
et passer a
comme paramètre d'une fonction, la fonction de réception a.push(3)
n'affectera pas a
. Est-ce que que tu voulais faire?
Tout d'abord, il n'y a pas de constantes dans JS (jusqu'à la proposition ECMAScript 6). Vous devrez utiliser var
pour construire quelque chose comme ça. Si vous voulez avoir des zones "privées" dans votre code JS, vous utilisez l'une des fonctionnalités du langage, qui sont des étendues.
Donc, par exemple, allez comme ceci:
var kindaConstant = function(){
var donttouchthis
... do something with it
return whateveryouvedonewithit
}
Dans ce cas, donttouchthis
n'est pas facilement mutables "de l'extérieur".