我需要将参数传递给 Javascript 中的回调函数,因此我执行了以下操作,创建了一个匿名函数作为字符串,然后将其传递:
var f = "var r = function(result) {do_render(" + i + ",result.name,result.data);}"
eval(f)
$.getJSON("analysis?file=" + getParameterByName('file') + "&step=" + i,r);
但这似乎不是一个好主意。有没有更好的办法?
您可以使用多种技术来执行此操作。其中之一是创建一个“密封”其中一个变量的新函数:
function myCallback(i, result) { ... }
function createCurriedFunction(i, func, context) {
return function (result) { func.call(context, i, result); }
}
for (i = 0; i < 5; i += 1) {
var curriedFunc = createCurriedFuncion(i, myCallback, this);
$.getJSON(url, curriedFunc);
}
上下文是回调函数中“this”将引用的对象。您正在做的事情可能需要也可能不需要;如果不是,你可以传入 null。
实际上有一个函数可以完成名为 bind 的功能,并且可以像这样使用
var curriedFunc = myCallback.bind(this, i), which will seal off the first variable.