it-swarm.com.de

Wie kann man Funktionsparameter in JavaScript konstant machen?

Ich möchte so viele unveränderliche Variablen wie möglich verwenden, um die Anzahl der beweglichen Teile in meinem Code zu reduzieren. Ich möchte "var" und "let" nur verwenden, wenn es notwendig ist.

Das funktioniert nicht:

function constParam(const a){
    alert('You want me to '+a+'!');
}

Irgendwelche Ideen?

26
shal

Funktionsparameter bleiben in ES6 veränderliche Bindungen (wie var), dagegen können Sie nichts dagegen unternehmen. Die beste Lösung, die Sie erhalten, besteht wahrscheinlich darin, das arguments-Objekt in einer const-Initialisierung zu zerstören:

function hasConstantParameters(const a, const b, const c, …) { // not possible
    …
}
function hasConstantParameters() {
    const [a, b, c, …] = arguments;
    …
}

Beachten Sie, dass diese Funktion eine andere Art hat (.length). Wenn Sie dies benötigen, müssen Sie einige Platzhalterparameter angeben.

32
Bergi

Sie können keinen Parameter const erstellen. Verwenden Sie es als Anfangswert einer lokalen Variablen:

function constParam(a) {
    const const_a = a;
    ...
}

Beachten Sie auch, dass const nur in Internet Explorer ab IE11 unterstützt wird. Siehe diese Kompatibilitätstabelle

12
Barmar

Das ist was ich mache:

Anstatt:

function F(const a, const b, const c, const d, const e, const f, const g){ // Invalid Code
    // lorem
    // ipsum
}

..Benutzen:

function F(){const[a, b, c, d, e, f, g] = arguments;
    // lorem
    // ipsum
}
1
Pacerier

Für unveränderliche Strukturen, glaube ich, suchen Sie Immutable.js .


Wie @Andreas_Gnyp sagt, gibt es bis ES6 kein let/const in JavaScript. (Weder wird es function(const a) {...} geben, wenn ES6 nicht mehr verfügbar ist und vollständig unterstützt wird.) Wenn Sie const verwenden möchten, können Sie entweder Ihre eigene Funktion const implementieren oder mit der Verwendung beginnen ES6-Notation mit Hilfe eines ES6-zu-ES5-Compilers von Drittanbietern, z. B. Babel .

Beachten Sie jedoch, dass const in der ES6-Notation nicht die Variable unveränderlich macht. Z.B. const a = [1, 2]; a.Push(3); ist ein vollständig gültiges Programm und a wird zu [1, 2, 3]. const wird only verhindern, dass Sie a neu zuweisen, so dass Sie nicht a = [] oder a = {} oder was auch immer tun können einmal const a = [1, 2]; bereits definiert (in diesem speziellen Bereich).

function hasConstantParameters(...args) {
    const [a, b] = args;
}

Immutable.js stellt sicher, dass, wenn Sie var a = fromJS([1, 2]); definieren und a als Funktionsparameter übergeben, in der Empfangsfunktion a.Push(3) wirkt sich nicht auf a aus. Ist es das, was du erreichen wolltest?

1
Bugs Bunny

Es gibt keine Möglichkeit, einen Parameter zu zwingen, in JavaScript unveränderlich zu sein. Sie müssen das selbst nachverfolgen.

Schreiben Sie einfach in einem Stil, in dem Sie Variablen nicht mutieren. Die Tatsache, dass die Sprache keine Möglichkeiten für force you bietet, bedeutet nicht, dass Sie es trotzdem nicht tun können.

0

Wir können ES6-Destrukturierung verwenden, um Konstanten aus Parametern zu erstellen

function test(...args) {
   const [a, b, c] = args;
}
0
Drenai
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
0