Javascript for循环的Int在函数-JS中不起作用
我对Javascript非常陌生,并注意到出现了这个奇怪的问题Javascript for循环的Int在函数-JS中不起作用,javascript,for-loop,Javascript,For Loop,我对Javascript非常陌生,并注意到出现了这个奇怪的问题 var dispatchMouseEvent = function(target, var_args) { var e = document.createEvent("MouseEvents"); e.initEvent.apply(e, Array.prototype.slice.call(arguments, 1)); target.dispatchEvent(e);
var dispatchMouseEvent = function(target, var_args) {
var e = document.createEvent("MouseEvents");
e.initEvent.apply(e, Array.prototype.slice.call(arguments, 1));
target.dispatchEvent(e);
};
var Level1Cats = document.getElementsByClassName("p-pstctgry-lnk-ctgry "); //GETTING LEVEL 1 CATS
var Level1CatsLen = Level1Cats.length; //GETTING LEVEL 1 CAT LEN
for (i = 0; i <= Level1CatsLen-1; i++) {
var ID1 = Level1Cats[i].id;
var temp1 = Level1Cats[i].innerHTML;
temp1.replace(/&/gi, "&").replace(/<[^>]*>/gi, "");
function GoToLevel2(callback) { //GO TO NEXT LEVEL!
dispatchMouseEvent(Level1Cats[i], "mouseover", true, true);
dispatchMouseEvent(Level1Cats[i], "click", true, true);
}
function GetLevel2() { //GET NEXT LEVEL
var Level2Cats = document.getElementsByClassName("p-pstctgry-lnk-ctgry");
return Level2Cats.length;
}
setTimeout(function() { //RUN IT WITH TIMING
GoToLevel2();
}, 100);
var Level2CatsLen = GetLevel2();
}
var dispatchMouseEvent=函数(目标,变量参数){
var e=document.createEvent(“MouseEvents”);
e、 initEvent.apply(e,Array.prototype.slice.call(arguments,1));
目标。调度事件(e);
};
var Level1Cats=document.getElementsByClassName(“p-pstctgry-lnk-ctgry”)//得到一级猫
var Level1CatsLen=Level1Cats.length//获得1级CAT LEN
对于(i=0;i/gi,“”);
函数GoToLevel2(回调){//转到下一级!
DispatchMouseeEvent(1级猫[i],“鼠标上方”,真,真);
DispatchMouseeEvent(Level1Cats[i],“点击”,真,真);
}
函数GetLevel2(){//GET NEXT LEVEL
var Level2Cats=document.getElementsByClassName(“p-pstctgry-lnk-ctgry”);
返回水平2厘米长度;
}
setTimeout(函数(){//随时间运行它
GoToLevel2();
}, 100);
var Level2CatsLen=GetLevel2();
}
执行代码时,它会给我一个错误(无法读取未定义的属性“dispatchEvent”)
我知道这是因为函数中的I似乎不起作用。如果我简单地将其替换为int值1,它将执行并按预期单击cat 1 16次
我本以为这应该行得通,有什么办法可以解决吗?在循环内部,当
I
为1
时,会创建一个闭包GoToLevel2
,关闭变量I
。然后循环运行,i
增加到2
,循环终止
然后您的setTimeout
在100ms后触发,并调用闭包。它仍然记得曾经有一个变量i
,但现在它包含2
Level1Cats[2]
未定义,您会得到一个错误
标准解决方案是将循环的内容封装到另一个不会关闭i
的自评估函数中:
for (i = 0; i <= Level1CatsLen-1; i++) {
(function(i) {
// ...
})(i);
}
for(i=0;i@Thilo爱你的工作:)