JavaScript中的闭包

我有一个这样的代码,我试图在某个按钮上添加一个事件处理程序。我想使用全局变量&将其当前值存储在回调闭包和&不是它的参考。
var globalNum="dummy";
function A()
{
  $("#button").click(function()
  {
     $("#button").append(globalNum);
  });
}

globalNum="dummyAgain";
现在,如果点击事件被触发,那么会添加什么 - “dummy”或“dummyAgain”? 我相信它将是“dummyAgain”因为存储闭包全局变量的引用。我想要绑定价值。 我知道我可以在A中创建一个局部变量,我可以使用全局变量&绑定那个但是还有其他更冷静的方式吗? 谢谢     
已邀请:
你是对的,它会附加dummyAgain。您可以使用
bind()
处理此问题并发送一些事件数据:
var globalNum="dummy";
(function A()
{
  $("#button").bind('click', {localNum: globalNum}, function(e)
  {
     $("#button").append(e.data.localNum);
  });
})();

globalNum="dummyAgain";
请注意,我立即执行函数
A
,因此在
globalNum
的值发生变化之前,单击处理程序会被附加。正如@Andrew在评论中指出的那样,这与不使用“包装”功能
A
的效果相同。 没有
bind
的相同解决方案:
(function()
 {
  var localNum = globalNum;
  $("#button").click(function()
  {
     $("#button").append(localNum);
  });
})();
这里匿名函数用于捕获局部变量中的当前值
globalNum
。 更新: 为了完整起见(我希望,@安德鲁,你不介意我把它放在这里)。 “最酷”的方法可能是使用函数的参数并使用此参数立即执行函数:
var globalNum="dummy";

(function(globalNum)
 {
  $("#button").click(function()
  {
     $("#button").append(globalNum);
  });
})(globalNum);

globalNum="dummyAgain";
“技巧”是参数的名称和全局变量的名称是相同的。 这也经常用于引用具有较短标识符的一些对象而不污染全局命名空间,例如,用jQuery:
(function($) {
    // jQuery == $
})(jQuery)
    
也许有一些更酷的方式,但在A中声明一个局部变量是最简单和直接的方式,因此是最好的。     

要回复问题请先登录注册