【问题标题】:Send interval id as an argument to executing function [duplicate]发送间隔ID作为执行函数的参数[重复]
【发布时间】:2016-11-26 17:12:07
【问题描述】:

是否可以将间隔 id 作为参数发送到执行函数?例如这样的事情:

var id= setInterval(myFunc.bind(null,id),1000);

我要做的是在myFunc 中进行一些处理并在需要时清除间隔。我不能使用全局变量,因为它会发生多次。而且我知道我可以使用全局数组,但由于我的函数逻辑,它会有点耗时。所以我想知道我是否可以将间隔 id 作为参数传递给myFunc

编辑: this stackOverfllow link 没有帮助我,因为没有有用的答案。

【问题讨论】:

  • @Ergec 这不是重复的,因为我没有问“如何传递参数”我问的是“如何传递间隔 id”
  • 是的,我发布后立即删除了

标签: javascript


【解决方案1】:

我使用这种模式:

function myFunc(host){
   console.log(host.id);
}

var host = {};
host.id = setInterval(myFunc.bind(null,host),1000);

【讨论】:

    【解决方案2】:

    您实际上可以尝试混合 setTimeout 和 setInterval 来完成您正在寻找的内容。

    您可以阅读更多关于 setInterval 的信息,了解如何将附加参数传递给函数。

    var interval = 0;
    
    function logId(param) {
      interval++;
    
      if (interval === 3) {
        clearInterval(param);
      }
      console.log(param);
    
    }
    
    var id = setInterval(function() {
      setTimeout(logId, 0, id)
    }, 1000);

    【讨论】:

      【解决方案3】:

      您可以创建自己的函数来将回调函数和区间 id 存储在同一个对象中,并将该对象传递给区间函数,该函数将使用区间 id 调用提供的函数。

      function setMyInterval(f,t) {
      
          var handleMyInterval = function(ob) {
              ob.func(ob.id);
          };
          var idOb = {func: f};               
          idOb.id = setInterval(handleMyInterval,t,idOb);     
      
          return idOb.id  
      }
      

      【讨论】:

        【解决方案4】:

        您可以在区间内使用函数,这样您就可以这样做。

        创建一个函数,它会在您设置的时间后执行间隔并自行清除。

        intervalTime 是循环间隔的时间,timeout 是清除间隔循环的时间。

        两者都以毫秒为单位接收。

        function test(intervalTime,Timeout,log){
            var id = setInterval(function(){
                 console.log(log)
            },intervalTime);
        
            setTimeout(function(){
                clearInterval(id);
            }, Timeout);
        }
        
        test(1000,10000,'test1');
        test(1000,1000,'test2');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-15
          • 1970-01-01
          • 1970-01-01
          • 2016-04-04
          • 1970-01-01
          • 2012-09-03
          • 2018-10-23
          • 1970-01-01
          相关资源
          最近更新 更多