我有这样一个功能:
var eatLunch = (function () {
var sandwiches = [$("#sand1"), $("#sand2")];
return function (eaten) {
for (var i = 0, len = eaten.length; i < len; i++) {
sandwiches[i].attr("class", "eaten-by " + eaten[i].by)
}
};
}());
eatLunch([
{
result: "good",
by: "Adam"
},
{
result: "meh",
by: "Adam"
}
]);
目的是将 dom 元素 #sand1 和 #sand2 缓存在闭包中,以减少此函数必须进行的 dom 接触次数。如果没有闭包,每次调用函数时都必须将元素分配给变量。
但是attr方法好像不行。经过进一步检查,定义了 sandwiches[i],并且它具有 attr 方法。该函数不会抛出错误,它只是不断循环,但不会更新 dom 元素。
如果我将 sandwich 移动到本地范围内,它会完美运行,但这样会更昂贵。见下文:
var eatLunch = function (eaten) {
var sandwiches = [$("sand1"), $("sand2")];
for (var i = 0, len = eaten.length; i < len; i++) {
sandwiches[i].attr("class", "eaten-by " + eaten[i].by)
}
};
eatLunch([
{
result: "good",
by: "Adam"
},
{
result: "meh",
by: "Adam"
}
]);
这是怎么回事?
最佳答案
您可能在加载 DOM 之前运行您的代码。
将其移至页面底部。
关于javascript - 无法访问关闭的 jQuery 对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6064409/