gpt4 book ai didi

javascript - 范围问题 - 此函数是否形成闭包 - JavaScript?

转载 作者:行者123 更新时间:2023-11-28 02:44:24 24 4
gpt4 key购买 nike

在我的脚本中,我调用函数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+1data.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 的函数。当触发绑定(bind)事件时,它会使用pagecallback的当前值,还是最初传递的值?

谢谢!

最佳答案

改变

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+1data.shop_zbid 的值设置为回调的本地值以获得所需的效果,否则在调用回调之前,可以在回调范围之外修改它们

关于javascript - 范围问题 - 此函数是否形成闭包 - JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12147256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com