您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

JavaScript中的函数只能调用一次

JavaScript中的函数只能调用一次

如果用“将不执行”来表示“多次调用将不执行任何操作”,则可以创建一个闭包:

var something = (function() {
    var executed = false;
    return function() {
        if (!executed) {
            executed = true;
            // do something
        }
    };
})();

something(); // "do something" happens
something(); // nothing happens

使用全局变量,其他代码可以重置“已执行”标志的值(无论您为它选择什么名称)。使用闭包时,其他代码都无法做到这一点,无论是偶然还是故意的。

正如这里的其他答案所指出的那样,几个库(例如Underscore和Ramda)都有一个小的实用程序函数(通常名为once()[*]),该函数接受一个函数作为参数并返回另一个函数,该函数调用一次所提供的函数,而无论如何多次调用返回函数。返回的函数还会缓存所提供的函数首先返回的值,并在后续调用中返回该值。

但是,如果您不使用这样的第三方库,但仍然想要这样的实用程序功能(而不是我上面提供的现成的解决方案),则很容易实现。我见过的最好的版本是DavidWalsh发布的这个版本:

function once(fn, context) { 
    var result;
    return function() { 
        if (fn) {
            result = fn.apply(context || this, arguments);
            fn = null;
        }
        return result;
    };
}

我倾向于更改fn = null;fn=context=null;。有没有理由,关闭,保持一个参考context一旦fn调用

[*] 但是,请注意,其他库(例如jQuery的Drupal扩展)可能具有名为的函数once(),该函数功能完全不同。

javascript 2022/1/1 18:22:20 有344人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶