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

Jo *_* E. 0 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能传递id_arr[a]showBranchfuncion 的值?

目前上面的代码返回nullid_arr[a]

fas*_*ast 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);
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 更新为以500ms步骤填充第二个req:showBranch().

  • 请不要使用术语"闭包"来描述这种解决方案.传递给`setTimeout`的回调是*已经*一个闭包.实际的解决方案是通过执行一个函数来创建一个新的作用域,而不是创建另一个闭包.被执行的函数是否是闭包与它没有任何关系. (2认同)
  • +1但是在for循环之外定义函数,因为每次重复时它会创建一个** (2认同)