Как бы я вызвал функцию только один раз, при любых дальнейших вызовах, возвращающих последнее значение из первого вызова? - PullRequest
0 голосов
/ 05 декабря 2018

Моя цель с помощью приведенного ниже кода состоит в том, чтобы любая функция, переданная в fn, ТОЛЬКО вызывалась один раз.Например, результат возвращает 5, и повторный вызов ниже также должен возвращать тот же номер.То, что у меня есть сейчас, продолжает возвращать новый номер вместо того же самого.

function once(fn) {
    var done = false;
    
    return function () {
        if (!done) {
            done = true;
            return fn.apply(this, arguments);
        } else if (done) {
            return fn.apply(this, arguments);
        }
    };
    
}

function add(x, y) {
    return x + y;
}

var addOnce = once(add);
var result = addOnce(2, 3);
result = addOnce(4, 4);

1 Ответ

0 голосов
/ 05 декабря 2018

Для получения того же значения вы можете сохранить значение и возвращать его для каждого вызова.

function once(fn) {
    var done = false,
        value;

    return function() {
        if (!done) {
            done = true;
            value = fn.apply(this, arguments);
        }
        return value;
    };
}

function add(x, y) {
    return x + y;
}

var addOnce = once(add);

console.log(addOnce(2, 3)); // 5
console.log(addOnce(4, 4)); // 5
...