Javascript 通过另一个函数访问动态数组中的值
我有一个函数,可以设置一组Javascript 通过另一个函数访问动态数组中的值,javascript,Javascript,我有一个函数,可以设置一组setTimeout函数。所有函数都添加到数组funcs;然而,当我尝试使用stopplay().clearTimeout停止它们时,数组没有值 如何访问这些函数以及它们上的clearTimeout var funcs = new Array(); function playWithDelay(){ for (var i = 0; i < PlayDatesArray.length; i++) { funcs[i] = c
setTimeout
函数。所有函数都添加到数组funcs
;然而,当我尝试使用stopplay().clearTimeout
停止它们时,数组没有值
如何访问这些函数以及它们上的clearTimeout
var funcs = new Array();
function playWithDelay(){
for (var i = 0; i < PlayDatesArray.length; i++) {
funcs[i] = createfunc(i);
}
for (var j = 0; j < PlayDatesArray.length; j++) {
funcs[j]();
}
}
function createfunc(i) {
return function() {
setTimeout(function(){
//my function
}, i*1500);
};
}
function stopplay(){
alert(this.funcs.count);
for (var i = 0; i< funcs.count; i++){
//things I tried
var tmpFunction = funcs[i];
//funcs[i].splice(i, 1);
clearTimeout(tmpFunction);
clearTimeout(funcs[i]);
funcs[i]=tmpFunction;
}
}
var funcs=new Array();
函数playWithDelay(){
对于(var i=0;i
您正在从stopplay()
访问this.funcs
,但是funcs被定义(至少在本例中)为全局变量。根据调用stopplay()的调用代码,this
与创建funcs
的全局范围不同
更新stopplay,将this.funcs.count
更改为funcs
,以查看是否使用上面创建的数组发出警报
另外,您确定funcs数组具有计数
?我会尝试使用length
function stopplay(){
alert(funcs.length);
for (var i = 0; i< funcs.length; i++){
....
}
}
函数stopplay(){
警报(函数长度);
对于(var i=0;i
编辑:
您没有保存setTimeout的返回值,因此无法清除超时。通过函数传递clearTimeout不会清除超时
你可以这样做:
var timers = new Array();
function createfunc(i) {
return function() {
timers.push( setTimeout(function(){
//my function
}, i*1500)) ;
};
}
function stopplay(){
for (var i = 0; i< timers.length; i++){
clearTimeout(timers[i]);
}
}
var timers=newarray();
函数createfunc(i){
返回函数(){
timers.push(setTimeout)(函数(){
//我的职能
},i*1500);
};
}
函数stopplay(){
对于(var i=0;i
您正在从stopplay()
访问this.funcs
,但是funcs被定义(至少在本例中)为全局变量。根据调用stopplay()的调用代码,this
与创建funcs
的全局范围不同
更新stopplay,将this.funcs.count
更改为funcs
,以查看是否使用上面创建的数组发出警报
另外,您确定funcs数组具有计数
?我会尝试使用length
function stopplay(){
alert(funcs.length);
for (var i = 0; i< funcs.length; i++){
....
}
}
函数stopplay(){
警报(函数长度);
对于(var i=0;i
编辑:
您没有保存setTimeout的返回值,因此无法清除超时。通过函数传递clearTimeout不会清除超时
你可以这样做:
var timers = new Array();
function createfunc(i) {
return function() {
timers.push( setTimeout(function(){
//my function
}, i*1500)) ;
};
}
function stopplay(){
for (var i = 0; i< timers.length; i++){
clearTimeout(timers[i]);
}
}
var timers=newarray();
函数createfunc(i){
返回函数(){
timers.push(setTimeout)(函数(){
//我的职能
},i*1500);
};
}
函数stopplay(){
对于(var i=0;i
clearTimeout
获取由setTimeout
返回的id,而不是函数本身的引用
因此,您需要的是(在ES5代码中)
var超时=[];
函数createfunc(i){
返回函数(){
返回setTimeout(函数(){
//我的职能
},i*1500);
};
}
//创建函数的代码
函数playWithDelay(){
对于(var i=0;i
clearTimeout
获取由setTimeout
返回的id,而不是函数本身的引用
因此,您需要的是(在ES5代码中)
var超时=[];
函数createfunc(i){
返回函数(){
返回setTimeout(函数(){
//我的职能
},i*1500);
};
}
//创建函数的代码
函数playWithDelay(){
对于(var i=0;i
是的,明白了,把c#
语法搞砸了。但是,clearTimeout并没有被应用,计划的函数也会被执行。请看我的编辑,您没有保存调用到setTimeout的返回值。您需要将setTimeout调用的返回值传递给clearTimeout,而不是第一次传递给setTimeout的函数。是的,得到了,语法混乱。但是,clearTimeout并没有被应用,计划的函数也会被执行。请看我的编辑,您没有保存调用到setTimeout的返回值。您需要将setTimeout调用的返回值传递给clearTimeout,而不是第一次传递给setTimeout的函数。