Javascript:将自定义参数传递给回调函数

rsm*_*thy 6 javascript closures loops callback

我有这个回调函数设置:

var contextMenu = [];
var context = [ { "name": "name1", "url": "url1" }, {"name": name2", "url: "url2" } ];
for(var i=0; i < context.length; i++) {
    var c = context[i];
    var arr = {};
    arr[c.name] = function() { callback(c.url); }
    contextMenu.push( arr );
}
function callback(url) {
   alert(url);
}
Run Code Online (Sandbox Code Playgroud)

问题是传递给回调的url值始终是上下文变量中的最后一个值 - 在本例中为"url2".我期望将特定值传递给回调的每个"实例",但由于回调似乎记住了相同的值,因此最后一次引用它.

我有点卡住了.任何帮助,将不胜感激.

PS:我正在使用jQuery ContextMenu,根据我的理解,它不支持将自定义数据发送到其回调函数.正是在这种背景下,我遇到了这个问题.在这种环境下要克服的任何建议也很有帮助!

Anu*_*rag 16

使用额外的封闭.

arr[c.name] = (function(url) { 
    return function() { callback(url); }
})(c.url);
Run Code Online (Sandbox Code Playgroud)

请参阅在循环中创建闭包:关于此主题的常见错误和大多数其他问题,现在您的问题也会添加到此池中.