JavaScript中的函数只能调用一次
我需要创建一个只能执行一次的函数,在第一次执行后,每次都不会执行。我从C++和Java知道可以完成此工作的静态变量,但我想知道是否有更优雅的方法来做到这一点?
回答:
如果用“将不执行”来表示“多次调用将不执行任何操作”,则可以创建一个闭包:
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中的函数只能调用一次 的全部内容, 来源链接: utcz.com/qa/431765.html