将参数传递给回调函数

时间:2015-05-21 19:42:01

标签: javascript

我需要在Javascript中将参数传递给回调函数,所以我做了以下操作,创建了一个匿名函数作为字符串然后传递它:

var f = "var r = function(result) {do_render(" + i + ",result.name,result.data);}"
eval(f)
$.getJSON("analysis?file=" + getParameterByName('file') + "&step=" + i,r);

然而,这似乎不是一个好主意。还有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用几种技术来执行此操作。其中之一是创建一个“封锁”其中一个变量的新功能:

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);
}

Context是回调函数中“this”将引用的对象。你正在做的事情可能需要也可能不需要;如果没有,你可以传入null。

实际上有一个函数可以完全调用bind,并且像

一样使用
var curriedFunc = myCallback.bind(this, i), which will seal off the first variable.

答案 1 :(得分:0)

看起来您在关闭i时遇到问题并使用eval来解决它。而不是那样,只需使用立即调用的函数表达式(IIFE)来关闭它,如下所示:

(function(i){
    //create a closure of the value of i
    //so that it takes the immediate value of it instead of the end value
    //based on the assumption i is from a loop iterator
    $.getJSON("analysis?file=" + getParameterByName('file') + "&step=" + i,
        function(result){
            do_render(i, result.name, result.data); 
        }
    );
})(i);//pass i into the IIFE in order to save its immediate value

答案 2 :(得分:0)

你可以简单地做

var url = "myurl";
$.getJSON(url, function(result){
    //callback function
});