Javascript setInterval没有使其成为函数

Javascript setInterval not making it into function

本文关键字:函数 setInterval Javascript      更新时间:2023-09-26

好的,我试图在子函数中执行setInterval,但它没有在其中。。。我的警报没有因为这个而响起:

var doneVar= 0;
var groupsVar= 4;
var interval = setInterval(process_chunk, 1000);
var $myTree= $("#myTree");
var chunkLength = myArray.length / groupsVar;

process_chunk = function() {
    alert("we are after chunk");
    var arrayChunk = myArray.slice(doneVar*chunkLength, (doneVar + 1)*chunkLength); 
    //alert("we are in function!!");
    $.each(arrayChunk,  function(key, item){
        $myTree.jstree("uncheck_node", "#"+item);
    });
    doneVar += 1;
    if (doneVar === groupsVar) {
        interval.clearInterval();
    }
}

process_chunk在将其传递到setInterval时尚未被分配值。移动线路:

var interval = setInterval(process_chunk, 1000);

在匿名函数分配给process_chunk之前(以及之后):

doneVar += 1;

或者,如果您正在寻找提升函数,则使用函数声明而不是表达式:

function process_chunk() {

两个版本都能解决您的问题。

在使用函数之前需要声明它。

看跌process_chunk = function() { ... });

之前var interval = setInterval(process_chunk, 1000);

如果你只使用区间的函数,请使用这个(我喜欢的方法,你的方法没有错)

var doneVar= 0;
var groupsVar= 4;
var $myTree= $("#myTree");
var chunkLength = myArray.length / groupsVar;
var interval = setInterval(function() {
    alert("we are after chunk");
    var arrayChunk = myArray.slice(doneVar*chunkLength, (doneVar + 1)*chunkLength); 
    //alert("we are in function!!");
    $.each(arrayChunk,  function(key, item){
         $myTree.jstree("uncheck_node", "#"+item);
    });
    doneVar += 1;
    if (doneVar === groupsVar) {
         interval.clearInterval();
    }
},1000);

应该这样做,这样做并在间隔内定义函数可以避免许多问题,比如在这种情况下,在间隔中设置函数之前需要定义函数。这是另一个保持你风格的版本。

var doneVar= 0;
var groupsVar= 4;
var $myTree= $("#myTree");
var chunkLength = myArray.length / groupsVar;
var process_chunk = function() {
     alert("we are after chunk");
     var arrayChunk = myArray.slice(doneVar*chunkLength, (doneVar + 1)*chunkLength); 
     //alert("we are in function!!");
     $.each(arrayChunk,  function(key, item){
          $myTree.jstree("uncheck_node", "#"+item);
     });
     doneVar += 1;
     if (doneVar === groupsVar) {
          interval.clearInterval();
     }
}
var interval = setInterval(process_chunk, 1000);

我想我刚才注意到的另一件事是,你使用process_chuck而不是var process_chuck开关也会引起问题。固定在第二个答案中,不适用于第一个答案。