我有这样的功能:
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方法似乎不起作用。在进一步检查时,定义了三明治[i],并且它具有attr方法。该函数不会抛出错误,它只是保持循环,但dom元素不会更新。
如果我将三明治放入本地范围,它可以很好地工作,但这样更贵。见下文:
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"
}
]);
这里发生了什么?
答案 0 :(得分:1)
var i = 0, var len = eaten.length;
请勿在第二个中使用var
。写:
var i = 0, len = eaten.length;
您还需要将eaten.by
更改为eaten[i].by
轻微的错误很难找到。
答案 1 :(得分:1)
您可能在加载DOM之前运行代码。
将其移至页面底部。