繁体   English   中英

双重调用的javascript函数,但只能运行一次

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM