jquery:带闭包的上下文?

时间:2010-07-28 06:43:10

标签: javascript jquery closures

我有一个关于jQuery的简单问题,而不是一般的javascript方法......

这样做可以吗? :

this._checkedTexts.length = 0; // <- array belonging to "me"
var contextCheckedTexts = this._checkedTexts;

$('#valueContainer input:checked').each(function() {
  contextCheckedTexts.push($(this).text());
});

由于'this'指向元素,我在这里使用一个闭包来为'each'处理程序保留额外的上下文。

这是'它是如何完成'的方式,或者以这种方式使用闭包可能有任何风险(内存泄漏......)?

还有哪些其他选择?

我发现它非常实用 - 但是我总是有点担心在使用闭包时引入引用计数问题 - 以后很难找到。

2 个答案:

答案 0 :(得分:0)

我不知道你想要达到的目的,但你的代码也可以像这样完成,

this._checkedTexts.length = 0; // <- array belonging to "me"

var arr = $('#valueContainer input:checked').map(function() {
  return $(this).text();
}).get();

this._checkedTexts = this._checkedTexts.concat(arr);

答案 1 :(得分:0)

似乎没问题,因为eachmapgrep等jQuery方法默认情况下不支持上下文(绑定到当前的jQuery对象)。但是,您可以创建自己的bind函数,该函数将上下文应用于函数(但在这种情况下,您不必使用默认上下文来获取元素文本)。