2

JS と純粋な関数内の問題を解決することについて頭を悩ませています。以下は不純な関数の例ですが、それが何をするかを理解するのに役立ちます。

function fn(some) {
    var ret = 'g',
        mid = 'o';

    if (some) return ret + some;
    ret += mid;

    return function d(thing) {
        if (thing) return ret += thing;
        ret += mid;
        return d;
    }
}

// Some output examples
fn('l')                 => 'gl'
fn()('l')               => 'gol'
fn()()()()()()()()('l') => 'gooooooool'

副作用を避けるために純粋にする必要がある場合はどうすればよいですか? 次の例では、不純な関数の問題が示されています。

var state = fn()(); 
state('l')       => 'gool'
state()()()('z') => 'goooooz' // ...and not 'gooloooz'

ありがとう!

4

1 に答える 1