如何将函数传递给循环中的setTimeout?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (57)

我正在尝试使用setTimeout来执行匿名函数,然后将信息传递给它,而我遇到了麻烦。这个(硬编码版本)可以正常工作:

setTimeout(function(){alert("hello");},1000);
setTimeout(function(){alert("world");},2000);

但是,我试图从数组中获取hello和world,并将它们传递到函数中,而不需要(A)使用全局变量,(2)使用val。我知道如何使用全局值或val来完成它,但是如果没有它,我如何才能做到这一点。下面是我想做的事情(但我知道这行不通):

var strings = [ "hello", "world" ];
var delay = 1000;
for(var i=0;i<strings.length;i++) {
    setTimeout( function(){alert(strings[i]);}, delay);
    delay += 1000;
}

当然,字符串我将脱离上下文。我如何传递字符串?

提问于
用户回答回答于
var strings = [ "hello", "world" ];
var delay = 1000;
for(var i=0;i<strings.length;i++) {
    setTimeout(
        (function(s) {
            return function() {
                alert(s);
            }
        })(strings[i]), delay);
    delay += 1000;
}
用户回答回答于

只需在setTimeout调用周围添加一个作用域:

var strings = [ "hello", "world" ];
var delay = 1000;
for(var i=0;i<strings.length;i++) {
    (function(s){
        setTimeout( function(){alert(s);}, delay);
    })(strings[i]);
    delay += 1000;
}

所属标签

可能回答问题的人

  • EatRice

    16 粉丝0 提问5 回答
  • gulu丶咕噜

    0 粉丝1 提问4 回答
  • 华讯云

    0 粉丝0 提问4 回答
  • 发条丶魔灵1

    9 粉丝526 提问3 回答

扫码关注云+社区

领取腾讯云代金券