在闭包范围中保存变量

时间:2011-06-05 02:59:55

标签: javascript jquery

我有以下内容:

var Save = $('th:first')[0];

$('th').click(function() {
    if (Save !== this) {
        Save = this;
        ...
    }
});

如何将“保存”放入封闭范围?

2 个答案:

答案 0 :(得分:4)

使用jQuery,我倾向于将整个部分包装在一个函数中,该函数将jQuery对象作为$传递,以避免在该速记上发生命名空间冲突,如recommended by the jQuery documentation。 / p>

(function($) {
    // ....
})(jQuery);

该范围内的任何变量,例如您的var Save,都会在闭包中超出全局名称范围。

答案 1 :(得分:4)

我真的不明白为什么你想要做你想做的事情(甚至你想要做什么......),但这里有两个解决方案,我认为这个问题是关于:

var Save = $('th:first')[0];

$('th').each(function() {
   var last = Save;
   $(this).click(function() {
      if (last !== this) {
         last = this;
          ...
      }
   });
});

var Save = $('th:first')[0];

$('th').data('Save', Save).click(function() {
    if ($(this).data('Save') !== this) {
        $(this).data('Save', this);
        ...
    }
});

** 编辑 **

如果您想要的只是“屏蔽”变量Save,那么

(function() {

var Save = $('th:first')[0];

$('th').click(function() {
    if (Save !== this) {
        Save = this;
        ...
    }
});

})();