将setInterval存储在数组中

时间:2015-08-22 22:13:58

标签: javascript

我对于我从react.js文档中获取的代码片段感到有些困惑: http://facebook.github.io/react/docs/reusable-components.html

但是我把它转换成了一般的js案例:

var SomeFunc = function(){
    this.intervals = []; 
    this.setInterval = function(){
        this.intervals.push(setInterval.apply(null, arguments));
    }; 
    var self = this; 
    this.cleanup = setTimeout(function(){ 
        self.intervals.map(clearInterval);
    }, 3000); 
}

var someFunc = new someFunc(); 
someFunc.setInterval(this.tick, 1000); 
someFunc.cleanup();  

我对以下几行感到困惑:

this.intervals.push(setInterval.apply(null, arguments));

当我在console.log中调用push的参数时,它会返回1 有人可以解释实际存储在这个数组中的内容吗? 清理工作,那么为什么数组显示数组索引号(+ 1?)而不是实际存储在数组中的数?

React.js jsfiddle:
http://jsfiddle.net/xsjfq5ex/2/

2 个答案:

答案 0 :(得分:6)

setInterval返回间隔ID,这是存储在数组中的内容:

  

重复调用函数或执行代码片段,每次调用该函数之间都有固定的时间延迟。返回intervalID。

     

intervalID是您可以传递给clearInterval()的唯一间隔ID。

答案 1 :(得分:2)

您正在构造函数为setInterval的对象上创建名为SomeFunc的属性。该属性是一个函数,它只是将创建间隔的任务委托给全局setInterval,但也会跟踪它创建的间隔。

使用setInterval.apply(null, arguments),实质上是调用全局setInterval,并将参数传递给它(这将是要执行的函数和以毫秒为单位的间隔)。 null表示this将在函数体内引用的内容。

setInterval()将创建间隔并返回分配给该间隔的ID;此ID是您存储在数组中的ID。当您调用cleanup时,您通过clearInterval映射数组,map接受要清除的间隔的ID(在这种情况下,通过app.navi.pushPage("searchResults"); app.navi.pushPage("postDetails"); //first instance app.navi.pushPage("userProfile"); app.navi.pushPage("usersPosts"); app.navi.pushPage("postDetails"); //second instance with different init params...not initializing properly 的回调传递。 / p>

因此,简单来说,您正在创建一个中间层来存储间隔,就像它们被“分配”到您创建的对象一样。这使得它们在您完成时更容易清除。