如何将for循环中的值传递给settimeout函数

时间:2014-02-12 09:32:05

标签: javascript

以下是我的javascript代码:

function showBranch_init() {
    var id_arr = ["jdc_b1","jdc_b2","jdc_b3","jdc_b4"];
    for(a=0;a<id_arr.length;a++){
        timeoutID = window.setTimeout(function() {

            showBranch(id_arr[a]); // <-- Right here

        }, 500);
    }
}

如何将id_arr[a]的值传递给showBranch funcion?

目前,上述代码会为null

返回id_arr[a]

3 个答案:

答案 0 :(得分:6)

通过为每个迭代步骤引入一个新范围(通过函数调用),您可以传递这样的参数:

function showBranch_init() {
    var id_arr = ["jdc_b1","jdc_b2","jdc_b3","jdc_b4"];
    for(a=0;a<id_arr.length;a++){
        (function(i) {
            timeoutID = window.setTimeout(function() {
                showBranch(id_arr[i]); // <-- Right here
            }, 500*i);
         })(a);
    }
}
  • 更新为以500毫秒的步骤填充第二个req:showBranch()..

答案 1 :(得分:0)

http://jsfiddle.net/HXc4d/

function showBranch_init() {
    var id_arr = ["jdc_b1","jdc_b2","jdc_b3","jdc_b4"];
    for(a=0;a<id_arr.length;a++){
        timeoutID = window.setTimeout(function(idvalue) {
            showBranch(idvalue);
        }(id_arr[a]), 500);
    }
}

编辑:您的解决方案的问题在于,当代码执行(超时)时,执行范围中不再存在id_arr,从而导致undefined结果。当将变量作为参数发送时,无论执行范围如何,它都会与函数本身“保持”。

答案 2 :(得分:-1)

function showBranch_init() {
var id_arr = ["jdc_b1","jdc_b2","jdc_b3","jdc_b4"];

    timeoutID = window.setTimeout(function() {
      for(a=0;a<id_arr.length;a++){
        showBranch(id_arr[a]); // <-- Right here
      }
    }, 500);
}
你可以这样做吗? O_O