Javascript 数组:不丢失同步函数中的元素?
我想知道为什么在下面的代码中,当函数setInterval死亡时,coupleFind数组的元素会被删除。想法是,进入a元素并检查她的标签名“ai” 当他接受这个标记时,他从其父元素开始复制整个元素,并将其放入数组中。它可以工作,但只在设置间隔函数内!我不明白,因为我在函数外声明了数组!我相信这是因为“设置间隔”不同步,但我不知道如何解决这个问题Javascript 数组:不丢失同步函数中的元素?,javascript,arrays,Javascript,Arrays,我想知道为什么在下面的代码中,当函数setInterval死亡时,coupleFind数组的元素会被删除。想法是,进入a元素并检查她的标签名“ai” 当他接受这个标记时,他从其父元素开始复制整个元素,并将其放入数组中。它可以工作,但只在设置间隔函数内!我不明白,因为我在函数外声明了数组!我相信这是因为“设置间隔”不同步,但我不知道如何解决这个问题 var clicked = 0, totalClicks = 3, index = 0, listIds = new Arra
var clicked = 0,
totalClicks = 3,
index = 0,
listIds = new Array("289657", "2680235", "1597254", "269621"),
coupleFound = new Array( ),
videos = document.getElementById( "videos_list" );
var interval = setInterval(function( ) {
coupleList = videos.getElementsByTagName( "a" );
for(var i = coupleList.length; i--;) {
for(j=0; j < listIds.length; j++) {
if(coupleList[i].getAttribute( "ai" ) == listIds[j]) {
coupleFound[index] = coupleList[i].parentNode;
index++;
break;
}
}
videos.removeChild( videos.lastChild );
}
document.getElementById('btnMoreVideos').click();
clicked++;
if(clicked >= totalClicks) {
clearInterval( interval );
alert("I'm inside of the function. The length is:" + coupleFound.length)
}
}, 1000);
alert("The length of the array is:" + coupleFound.length);
var=0,
总点击数=3,
指数=0,
listIds=新数组(“289657”、“2680235”、“1597254”、“269621”),
coupleFound=新数组(),
视频=document.getElementById(“视频列表”);
var interval=setInterval(函数(){
coupleList=videos.getElementsByTagName(“a”);
对于(var i=coupleList.length;i--;){
对于(j=0;j=总单击次数){
间隔时间;
警报(“我在函数内部。长度为:”+coupfind.length)
}
}, 1000);
警报(“数组的长度为:“+found.length”);
我能做些什么来解决这个问题呢?你或多或少是对的<代码>设置间隔是异步的。在第三次触发setInterval之前,将立即运行最后一行代码 在JavaScript中没有很好的休眠/阻塞方法。您必须重新构造代码,使其按您想要的顺序运行。通常这意味着使用回调。i、 例如,从
if(clicked>=totalClicks)
块内部调用一个函数,该函数执行您想要的操作,而不是将其放在setInterval
之后
e、 g
var=0,
总点击数=3,
指数=0,
listIds=新数组(“289657”、“2680235”、“1597254”、“269621”),
coupleFound=新数组(),
视频=document.getElementById(“视频列表”);
函数allDone(){
警报(“数组的长度为:“+found.length”);
}
var interval=setInterval(函数(){
coupleList=videos.getElementsByTagName(“a”);
对于(var i=coupleList.length;i--;){
对于(j=0;j=总单击次数){
间隔时间;
警报(“我在函数内部。长度为:”+coupfind.length);
allDone();
}
}, 1000);
尽管您应该尽可能避免使用全局变量。如果不需要访问太多变量,可以将
couplefind
或其长度传递到allDone
。提示:检查我们的JS闭包
var clicked = 0,
totalClicks = 3,
index = 0,
listIds = new Array("289657", "2680235", "1597254", "269621"),
coupleFound = new Array( ),
videos = document.getElementById( "videos_list" );
function allDone() {
alert("The length of the array is:" + coupleFound.length);
}
var interval = setInterval(function( ) {
coupleList = videos.getElementsByTagName( "a" );
for(var i = coupleList.length; i--;) {
for(j=0; j < listIds.length; j++) {
if(coupleList[i].getAttribute( "ai" ) == listIds[j]) {
coupleFound[index] = coupleList[i].parentNode;
index++;
break;
}
}
videos.removeChild( videos.lastChild );
}
document.getElementById('btnMoreVideos').click();
clicked++;
if(clicked >= totalClicks) {
clearInterval( interval );
alert("I'm inside of the function. The length is:" + coupleFound.length);
allDone();
}
}, 1000);