Mat*_*spy 5 javascript jquery for-loop settimeout
我刚刚遇到了一个非常奇怪的问题(尽管已解决),但我想知道为什么会首先发生:
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]);
}
Run Code Online (Sandbox Code Playgroud)
控制台日志显示“#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);
}
Run Code Online (Sandbox Code Playgroud)
那确实成功了,但是我不知道为什么第一个代码不起作用。有人可以向我解释吗?谢谢你!
在JSFiddle中,两个版本都可以正常工作(并且相同):
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
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
因此,我怀疑您所看到的是其他代码的副作用(未显示)。
唯一奇怪的是,您两次登录了第一个版本(一次在setTimeout之外,它将在开始时显示-如您所述)
现在已经看到了真实的代码,原因是speech在超时期间更改了数组。当超时功能最终被击中时,speech数组为空!
| 归档时间: |
|
| 查看次数: |
9111 次 |
| 最近记录: |