2016-06-29 5 views
1

小さな接続関数を実装しようとしました。それは、パラメータでオブジェクトを取り、それらを関数に入れるべきです。私の期待では、最新のオブジェクトを常に使用する必要があります。それは本当でないように見えます。javascript関数のパラメータからのクロージャが更新時に反映されない

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'は怠惰に評価された奇妙なカルト関数のように見えます。既にES2015の構文に頼っているので、 'const connect = param => fn =>()=> fn(param);'に書き直してください。 – ftor

+0

実際のコードはES2015の構文を使用し、提供されている例と同じ方法で動作します。 –

答えて

3

executeの変数は、引数、つまりローカル変数です。変数storeを参照していません。

引数を削除してグローバル変数を直接参照するか、代わりにオブジェクトのプロパティを変更してください。 store.type = "updated";

この奇妙な機能の配置のポイントは、とにかく何ですか?

+0

これはおそらく、遅れて – ftor

+0

と評価されているカレー化された形式の関数でなければなりません。これは[Issue](https://github.com/mjrussell/redux-auth-wrapper/issues/52)で説明されている問題の小さな例です。私は2つのライブラリを統合したい。 –

+0

@マッティあなたの答えをありがとう。あなたは正しい方法で私を指示しました。 –

関連する問題