我有这个脚本:
for (var i = 1; i <= 2; i++) {
setTimeout(function() { alert(i) }, 100);
}
Run Code Online (Sandbox Code Playgroud)
但是3两次都被提醒,而不是1那时2.
有没有办法传递i,而不是将函数写为字符串?
我正在尝试使用setTimeout来执行我传递信息的匿名函数,我遇到了麻烦.这个(硬编码版本)可以正常工作:
setTimeout(function(){alert("hello");},1000);
setTimeout(function(){alert("world");},2000);
Run Code Online (Sandbox Code Playgroud)
但是我试图从数组中取出hello和world并将它们传递给函数,而不是(a)使用全局变量,以及(2)使用eval.我知道如何使用全局或eval来做到这一点,但是如何在没有它的情况下做到这一点.这是我想做的(但我知道它不会起作用):
var strings = [ "hello", "world" ];
var delay = 1000;
for(var i=0;i<strings.length;i++) {
setTimeout( function(){alert(strings[i]);}, delay);
delay += 1000;
}
Run Code Online (Sandbox Code Playgroud)
当然,字符串[i]将脱离上下文.如何在没有eval或globals的情况下将字符串[i]传递给该匿名函数?
我是javascript的新手,我试图在for循环中使用setTimeout调用函数.循环为nodeList的每个成员执行.
我发现我用setTimeout调用的函数实际上只是在循环的最后一次迭代中执行.在下面的例子中,我想对setTimeout进行三次单独的调用,但我发现前两个调用被忽略了.
function moveants(e, stepdistance) {
. . . . .
for(var i = 0; i < 3; i++)
{
var nextAnt = antgroup.childNodes[i]
nextAnt.count = 0;
nextAnt.member = i;
setTimeout(function () { takeStep(nextAnt, mouseclickX, mouseclickY, 10) }, 0);
}
}
function takeStep(ant, destX, destY, stepDistance) {
. . . .
. . . .
if( condition )
{
return;
}
else
{
takeStep(ant, destX, destY, stepDistance);
}
}
Run Code Online (Sandbox Code Playgroud)
我看过其他帖子描述了多次调用setTimeout.令人惊讶的是(对我来说),如果我简单地将它们从这样的for循环中取出,那么多个调用将会起作用.
setTimeout(function () { takeStep(antgroup.childNodes[0], …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习如何在javacript for循环中将参数传递给setTimeout.这是示例代码.正如它目前所写的那样,setTimeout每次传递的精确度都相同,而不是反映实际在数组中的不同i.
var a=100;
for (i in array)
{
setTimeout("do_stuff(i, a)"), 2000);
}
Run Code Online (Sandbox Code Playgroud)
(我在这里看到了一些类似的问题和答案,但代码示例要复杂得多.回答这个最基本的例子可以帮助其他人解决同样的问题.谢谢!)
我正在尝试编写一些JS复制jQuery的fadeIn和fadeOut函数.这是我到目前为止的代码:
function fadeIn(elem, d, callback)
{
var duration = d || 1000;
var steps = Math.floor(duration / 50);
setOpacity(elem,0);
elem.style.display = '';
for (var i = 1; i <= steps; i++)
{
console.log(i/steps + ', ' + (i/steps) * duration);
setTimeout('setOpacity("elem", '+(i / steps)+' )', (i/steps) * duration);
}
if (callback)
setTimeout(callback,d);
}
function setOpacity(elem, level)
{
console.log(elem);
return;
elem.style.opacity = level;
elem.style.MozOpacity = level;
elem.style.KhtmlOpacity = level;
elem.style.filter = "alpha(opacity=" + (level * 100) + ");";
}
Run Code Online (Sandbox Code Playgroud)
我遇到第一个setTimeout调用的麻烦 - …