在我的脚本中,我正在调用函数dynamo.toolbox.add_temp_button
。这方面的一个例子是:
if(page < total_pages){
dynamo.toolbox.add_temp_button("Next Page",function(){
dynamo.shop.enter.access(page+1,data.shop_zbid);
});
}
正如您在此调用中所看到的,传递了两个参数page+1
和data.shop_zbid
。现在这些值不是常数,并且由于脚本的整体功能而快速变化。
现在这里是功能本身:
add_temp_button : function(text,callback){
var id = text.toLowerCase().replace(/[^A-Za-z_]/g,"_");
callback = callback !== undefined && callback !== null ? callback : function(){};
var but = '<button value="'+text+'" id="jqi_state0_button'+id+'" name="jqi_state0_button'+id+'" class="dynamo_temp_button">'+text+'</button>';
$("#jqi_state0_buttonClose").before(but);
$("#jqi_state0_button"+id).bind('click',callback);
},
请注意,这已从我的脚本中删除,但由dynamo.toolbox.add_temp_button
调用。
现在,我需要知道这是否形成了一个闭包,即我传递给add_temp_button
函数的参数值是否会被设置为一个结尾?
我最担心的是第二个参数callback
。这是一个作为回调函数传递给$.bind
的函数。触发绑定事件时,它会使用当前值page
和callback
,还是最初传递的值?
感谢 - 你!
答案 0 :(得分:1)
更改
if(page < total_pages){
dynamo.toolbox.add_temp_button("Next Page",function(){
dynamo.shop.enter.access(page+1,data.shop_zbid);
});
}
到
if(page < total_pages){
dynamo.toolbox.add_temp_button("Next Page",(function(a,b){
return function() { dynamo.shop.enter.access(a,b); }
})(page+1,data.shop_zbid));
}
并且您将获得所需的内容 - 您需要将page+1
和data.shop_zbid
的值设置为回调的本地值以获得所需的效果,否则可以在回调范围之外修改它们。回调被称为