jQuery and setTimeout inside For loop
jQuery and setTimeout inside For loop
我刚刚遇到了一个非常奇怪的问题(不过我修复了它),但我想知道为什么首先会发生这种情况:
function stuffAppear() {
var i;
for (i = 0; i < speech.length; i++) {
apperance(i);
}
}
function apperance(i) {
var x = speech[i];
setTimeout(function() {$(speech[i]).fadeIn(1000); console.log(i);}, 1000 + i * 1500);
console.log(speech[i]);
}
控制台日志显示"#yo0"然后"#ma0b"(这是必需的),但同时,它们从未淡入
我玩了一下代码,直到我达到这个:
function stuffAppear() {
var i;
for (i = 0; i < speech.length; i++) {
apperance(i);
}
}
function apperance(i) {
var x = speech[i];
setTimeout(function() {$(x).fadeIn(1000); console.log(i);}, 1000 + i * 1500);
}
这确实起到了作用,但我不知道为什么第一段代码不起作用。有人可以向我解释一下吗?谢谢!
在JSFiddle中,两个版本都可以正常工作(并且相同):
第一:http://jsfiddle.net/TrueBlueAussie/Bkz55/3/
var speech = ["#yo0", "#ma0b", "#blah"];
function stuffAppear() {
var i;
for (i = 0; i < speech.length; i++) {
apperance(i);
}
}
function apperance(i) {
var x = speech[i];
setTimeout(function() {$(speech[i]).fadeIn(1000); console.log(i);}, 1000 + i * 1500);
console.log(speech[i]); // <<< THIS WOULD OCCUR IMMEDIATELY
}
第二:http://jsfiddle.net/TrueBlueAussie/Bkz55/4/
var speech = ["#yo0", "#ma0b", "#blah"];
function stuffAppear() {
var i;
for (i = 0; i < speech.length; i++) {
apperance(i);
}
}
function apperance(i) {
var x = speech[i];
setTimeout(function() {$(x).fadeIn(1000); console.log(i);}, 1000 + i * 1500);
}
所以我怀疑你所看到的是你的其他代码的副作用(未显示)。
唯一奇怪的是您在第一个版本中登录了两次(一次是在开始时显示的 setTimeout 之外 - 正如您提到的)
跟进:
现在看到了真正的代码,原因是在超时期间speech
数组发生了变化。当超时功能最终被击中时,speech
数组为空!
相关文章:
- jQuery setTimeOut: in for-loop
- javascript/angularjs 将 String 与 number for loop 连接起来
- JavaScript for loop
- Native/$q Javascript For Loop Promise Resolve
- Javascript / Openlayers for loop不起作用
- for loop inside another for loop javascript (jquery)
- Json "for" loop
- 如何使用$q promise同步执行FOR LOOP
- JavaScript for loop "document.getElementById"
- Javascript Generic For Loop
- JavaScript For Loop - 执行终止条件
- 在 for loop JavaScript 中添加数字
- New to Javascript - For Loop
- MongoDB For Loop更新错误的用户
- javascript for loop won't iterate
- Javascript for loop产生意想不到的结果
- for loop, Math.random() 不按预期运行
- Javascript:for loop获取数据,但顺序被破坏了
- 有一些JavaScript问题,for loop.将数字转换为其字符串值
- JavaScript for-loop:如何让我的数字转换器工作