javascript - 我如何只调用一个函数一次,任何进一步的调用返回第一次调用的最后一个值?

标签 javascript function return invoke

我对下面代码的目标是让传递给 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);

最佳答案

要获得相同的值,您可以存储该值并在每次调用时返回它。

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

关于javascript - 我如何只调用一个函数一次,任何进一步的调用返回第一次调用的最后一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53628283/

相关文章:

Javascript utf-8 substr 和长度函数

javascript - 将 require 与相对路径一起使用

javascript - 使用 JavaScript 动画化 CSS3 转换的值是否排除了硬件加速?

javascript - Jexcel 删除所有单元格并在 if 语句上留下数字 1

function - TypeScript:函数表达式重载

jQuery Ajax : return value to caller?

c++ - 给出了在 C++ 中返回对象的各种方法,这些 return 语句中的每一个的潜在问题是什么

jquery - 延迟 jquery 重定向

c - 在 C 中打印数组的随机元素

c - C 中获取链表的第 n 个值