如何向回调函数中传⼊其他参数
如何向回调函数中传参数
最近写JS经常会因为向回调函数中传参⽽头疼,今天总结⼀下向回调函数中传参的⽅法,以后的应⽤中就不⽤在到处去了。
⾸先构建⼀个需要向回调函数中传⼊参数的典型应⽤。在⼀个页⾯中产⽣了⼀系列的向Ajax Proxy的请求,传⼊的是⼀个ID,根据ID返回了不同的内容值,我们需要把这些内容打印在页⾯上,同时给页⾯元素赋予ID,这个时候就需要向回调函数中传⼊ID,以产⽣带ID的页⾯元素。
第⼀种⽅法就是使⽤全局变量,能够被函数和回调函数同时访问。这种⽅法虽然不够优雅,但是确实能够完成任务。
这种⽅法在传⼊单个的变量时没什么问题,但是当我们在⼀个循环的结构中,不断的传⼊变量到回调函数,这个时候传⼊的变量会采⽤最后⼀次传⼊的变量值,这就与我们预想的结果有了出⼊。
第⼆种办法是使⽤Closure,这种⽅法更加优雅⼀些。通过使⽤Closure,我们通过匿名函数来重新包装返回的对象,同时将需要传⼊的参数做为新的属性传给回调函数。
第三种⽅法假设你需要为你的回调函数使⽤不同的签名,例如Ajax.Net的专家们允许你在回调中使⽤额外的参数,如果你想从⼀个换到另外⼀个并且保持兼容性的话,就要⽤到下⾯的写法:
第四种办法其实就是Closure的⼀种变体,你不需要显⽰的声明⼀个回调函数,⽽是使⽤⼀个匿名函数直接进⾏你所需要的处理。
如何向回调函数中传参数
总结⼀下:向回调函数中传⼊参数的终极办法其实就是利⽤Closure,这个看来是唯⼀可⾏⽽且⽐较优雅的⽅法,下⾯将Closure的写法列在下⾯:
var callback = {
success:function(data){
var item = ateElement("li");
ajax实例里面的函数item.id = data.id;
item.innerHTML = "The id is : " + data.id;
item.innerHTML += " The value is : " + data.value;
var parent = ElementById("result");
parent.appendChild(item);
},
failure:function(){
alert('failure:');
}
}
xhr = new QueuedHandler();
for(var i=0;i<20;i++){
data = eval('(' + data + ')');
data.id = i;
callback.success(data);
});
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。