作用域问题-此函数是否形成闭包-JavaScript
Scoping issue - Is this function forming a closure - JavaScript?
在整个脚本中,我都在调用函数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
的当前值,还是最初传递的值?
谢谢!
更改
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
的值成为回调的本地值以获得所需的效果,否则在回调被调用之前,它们可以在回调范围之外进行修改
相关文章:
- for循环中的JavaScript闭包
- Javascript闭包-如何防止内存泄漏
- Javascript.闭包和dynamic'这'实际上具有约束力
- 如何告诉闭包javascript编译器不要混淆webkitAudioContext的方法名称
- 如何使用外部Javascript库(如jQuery)重命名Google闭包样式表
- 就良好实践而言,带闭包的javascript原型是一件好事吗
- 闭包中的Javascript值
- 用于添加两个数字的javascript闭包的用法
- 什么'这个javascript闭包的区别是什么
- javascript,将参数传递给函数内部的闭包中的回调
- javascript中的闭包对我来说工作方式不同
- 我可以使用JavaScript闭包添加数字吗
- 在Javascript中使用闭包
- 这是在JavaScript中形成闭包的正确方法吗
- 作用域问题-此函数是否形成闭包-JavaScript
- JavaScript - 为什么这个闭包不保存参数
- javascript闭包:保护内部变量
- 如何测试只在闭包范围中可见的javascript方法
- JavaScript闭包&回调函数
- 闭包 JavaScript 有助于理解示例