Javascript Can';t通过setTimeout调用函数
我试图让一些函数一个接一个地工作,它们之间的等待时间为1.5秒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
现在,当我尝试使用相同的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);
}