2016-06-29 3 views
1

Ich habe versucht, eine kleine Verbindungsfunktion zu implementieren. Es sollte ein Objekt in Parameter nehmen und sie in eine Funktion setzen. Meine Erwartung das neueste Objekt sollte immer verwendet werden. Sieht so aus als wäre es nicht wahr.Javascript Schließung von Funktionsparameter wird nicht wiedergegeben, wenn es aktualisiert wird

let store = { type: 'initial' }; 

console.log(store); 

function connect(param) { 
    const connected2 = function (fn) { 

    return function() { 
     return fn(param); 
    } 
    }; 
    return connected2; 
} 

function execute(store) { 
    console.log(store); 
} 

const connected = connect(store)(execute); 

connected(); // console => { type: 'initial' } 
store = {type: 'updated'}; 
connected(); // console { type: 'initial' } but expect updated 
+0

'connect' sieht aus wie eine seltsame Curry-Funktion, die faul ausgewertet wird. Schreiben Sie es in 'const connect = param => fn =>() => fn (param);' da Sie sich bereits auf die ES2015-Syntax verlassen. – ftor

+0

der echte Code verwendet ES2015 Syntax und es funktioniert auf die gleiche Weise wie im Beispiel zur Verfügung gestellt. –

Antwort

3

Die Variable in execute ist ein Argument, das heißt eine lokale Variable. Es bezieht sich nicht auf die globale Variable store.

Entfernen Sie entweder das Argument und verweisen Sie direkt auf die globale Variable, oder ändern Sie stattdessen die Eigenschaften des Objekts, z. store.type = "updated";.

Was ist der Sinn dieser bizarren Anordnung von Funktionen?

+0

Es sollte wahrscheinlich eine Funktion in Curry-Form sein, die faul bewertet wird – ftor

+0

Dies ist ein kleines Beispiel für das Problem beschrieben in [Problem] (https://github.com/mjrussell/redux-auth-wrapper/issues/52). Ich möchte zwei Bibliotheken integrieren. –

+0

@ Matti Danke für Ihre Antwort. Du hast mich richtig geleitet. –

Verwandte Themen