Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t通过setTimeout调用函数_Javascript_Jquery_Asp.net_Function_Var - Fatal编程技术网

Javascript Can';t通过setTimeout调用函数

Javascript Can';t通过setTimeout调用函数,javascript,jquery,asp.net,function,var,Javascript,Jquery,Asp.net,Function,Var,我试图让一些函数一个接一个地工作,它们之间的等待时间为1.5秒 现在,当我尝试使用相同的Id执行此操作时(在“NoteList(>此处中),这是因为所有函数都引用相同的livei变量,而不是调用setTimeout()时变量的值)。这意味着当超时实际运行函数时,i将是36 请尝试以下方法: for (var i = 0; i < 36; i++) { (function(x){ setTimeout(function () { OnClcRan

我试图让一些函数一个接一个地工作,它们之间的等待时间为1.5秒


现在,当我尝试使用相同的Id执行此操作时(在“NoteList(>此处中),这是因为所有函数都引用相同的live
i
变量,而不是调用
setTimeout()时变量的值)
。这意味着当超时实际运行函数时,
i
将是
36

请尝试以下方法:

    for (var i = 0; i < 36; i++) {
        (function(x){
           setTimeout(function () { OnClcRandom(NoteList[x]) }, i * 1000 + 1000);
        )(i);
    }
for(变量i=0;i<36;i++){
(功能(x){
setTimeout(函数(){OnClcRandom(NoteList[x])},i*1000+1000);
)(i) );
}

这将在循环的每次迭代中执行一个匿名函数,每次执行都会获得自己的
x
参数,以便在原始函数中使用。

Javascript不会为块创建局部作用域。:)

在第二个例子中,var i等于36(最后一个值)。 您需要在循环内创建局部作用域

for (var i = 0; i < 36; i++) {

 (function (i) {
   setTimeout(.......);
}(i))

}
for(变量i=0;i<36;i++){
(职能(一){
设置超时(……);
}(i) )
}
您还可以将固定的“i”值指定给函数属性:

for (var i = 0, f; i < 36; i++){
  f = function _callback() { var i = _callback.i; .....};
  f.i = i;
  setTimeout(f, i * 1000);
}
for(变量i=0,f;i<36;i++){
f=函数_callback(){var i=_callback.i;…};
f、 i=i;
设置超时(f,i*1000);
}
for (var i = 0; i < 36; i++) {

 (function (i) {
   setTimeout(.......);
}(i))

}
for (var i = 0, f; i < 36; i++){
  f = function _callback() { var i = _callback.i; .....};
  f.i = i;
  setTimeout(f, i * 1000);
}