2

我有一种情况,我正在使用具有绑定功能的包/插件。

我使用代码调用绑定,该代码是 myevents 触发回调时的过滤器。在这个场景中,将进行三个调用来绑定,一个带有参数“t1”,第二个用于“t2”,第三个用于“t3”。

当从 myevents 对象触发事件时,将使用 data 参数调用回调(取决于代码)。

我的问题是当回调函数被调用时,我需要知道循环最初绑定时的索引号。例如,我在 alert 语句中有 i 变量,但我不知道如何获取那里的值以便在最终触发回调时保存。

似乎会有一些“函数(数据,i)”的组合来实现这一点。

bindList = array('t1','t2','t3');

for (var i = 0; i < bindList.length; i++) {
        myevents.bind(bindList[i], function(data) {
            alert('data arrive on item ' + i + ': ' + data);
        });
    }

我将不胜感激任何帮助。谢谢。

4

1 回答 1

5

使用闭包。由于 JS 变量是“函数范围的”,因此at 0在迭代中的任何点都i指代相同的变量。i我们需要为每次迭代创建一个范围,以便绑定代码引用闭包i而不是循环的i.

for (var i = 0; i < bindList.length; i++) {
  (function(i){
    myevents.bind(bindList[i], function(data) {
      alert('data arrive on item ' + i + ': ' + data);
    });
  }(i));
}
于 2013-04-24T20:42:44.083 回答