[英]javascript function for double call but run only once
检查下面的代码。 我两次调用once()
函数once()
,而console.log()
运行一次。 但是,在运行脚本后,直到刷新html页面后,one once()
函数才会再次运行。 现在,您能告诉我如何将该函数设置为吗?我将始终调用该函数两次,并且它将仅在第一次运行该函数,并且它将继续运行而无需刷新html页面。 任何想法?
JS代码:
var once = function() {
if(once.done) return;
console.log('Doing this once!');
once.done = true;
};
once(); once();
您使用相同的功能。 如果将done设置为true
则不再执行。 因此,它完全符合您的编程要求。 第一个if是停止下一个执行。
var once = function() {
if(once.done) return;
console.log('Doing this once!');
once.done = true;
};
// executed
once();
once.done = false;
// executed
once();
// not executed
once();
首先,如果将done设置为false
,它将输出第二个结果。
由于这种情况,您不能两次调用此函数,然后将其设置为true
。 目前,这正在按预期进行 。
要使其正常工作,您需要设置once.done= false
,然后再次调用函数。
下面是工作代码:
var once = function() { if (once.done) return; console.log('Doing this once!'); once.done = true; }; once(); once.done = false; once();
或者,您可以将option作为参数传递,如下面的示例所示
var once = function(retry) {
if (once.done && !retry) return;
console.log('Doing this once!');
once.done = true;
};
一旦();
一旦(真);
每次使用时,您所使用的状态都必须是新的。 因此,如果您在函数中创建该函数,然后将其用作回调,则它将在创建该函数的每次运行中都执行一次,但是,如果您全局定义了该函数,则每次重载将只工作一次。 您决定。 我使用下划线来执行此操作,因此不必:
function doSomething(fn, str) { const once = _.once(fn); once(str); once(str); } doSomething(console.log, 'Hello'); doSomething(console.log, 'World'); const add = _.once(() => (console.log('adding!'),5 + 5)); console.log(add()); console.log(add());
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
因此,发生的情况是下划线会缓存第一次运行的结果,并在连续调用时返回结果。 因此,如果您需要使用_.once
的结果,则可以使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.