【发布时间】:2011-03-24 02:49:15
【问题描述】:
可能重复:
Javascript closure inside loops - simple practical example
我怎样才能做到这一点?
// Phrases
var phrases = new Array();
phrases[0] = 'Phrase 1';
phrases[1] = 'Phrase 2';
phrases[2] = 'Phrase 3';
for (var i = 0; i < phrases.length; i++) {
var content = phrases[i];
$('#phrase').html(content).slideDown('slow').delay(1000).fadeOut('slow');
};
这是 HTML:
<p id="phrase"></p>
将 content 变量传递给 html() 函数我注意到 content 总是等于数组中的最后一个短语,并且循环运行幻灯片/延迟/淡入淡出功能 3 次。
我知道这与 for 循环中的闭包有关,并且我查看了无数示例,但我就是无法理解它。有人可以解决这个问题并向我解释一下吗?
编辑:抱歉之前不清楚,我已经编辑了这个问题以包含 HTML 和有问题的数组。
功能:不同的短语保存在 phrases[] 数组中,我想将短语插入到 <p> 元素中,然后向下滑动该元素,将其留在屏幕上一秒钟,然后淡出。然后我想转到 phrases[] 数组中的下一个短语并执行相同的功能。
【问题讨论】:
-
循环真正做的是选择具有该 id 的元素并在循环的每次迭代中写入它,因此它每次都会覆盖它,直到最后一次迭代。解释你想要做什么
-
感谢 Crayon,我已更新问题以反映我正在尝试做的事情。
-
难道 delay(1000) 实际上现在返回控制权并插入一个任务以从现在开始 1 秒或 1000 秒后发生(原型需要几秒钟)?如果是这样,循环将很快执行,然后在 1 秒后所有排队的屏幕更改将很快发生。另外,我不确定带有 delay() 的行在语法上是否有效,至少在与prototype.js 一起使用时是这样。不过我还没试过。
标签: javascript loops for-loop closures