Javascript 无法访问关闭的jQuery对象的方法
我有这样一个函数:Javascript 无法访问关闭的jQuery对象的方法,javascript,jquery,closures,Javascript,Jquery,Closures,我有这样一个函数: 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)
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"
}
]);
var=(函数(){
var三明治=[$(“#三明治1”),$(“#三明治2”);
返回函数(EAT){
for(变量i=0,len=0.length;i
其目的是在闭包中缓存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"
}
]);
var eatLunch=函数(eat){
var sandwiches=[$(“三明治1”),$(“三明治2”);
for(变量i=0,len=0.length;i
这是怎么回事?
var i=0,var len=eat.length代码>
不要在第二个选项中使用var
。写:
var i=0,len=0.length代码>
您还需要将eat.by
更改为eat[i].by
小错误很难发现
您可能正在加载DOM之前运行代码
将其移到页面底部。这并不能解释为什么他的第二个示例有效。我不知道这是否是他的真实代码。@Slaks,它被破坏了:\n这只是一个说明性的例子。这是一个简化版本。您提到的错误是示例中的打字错误。我已经更新了它们。抱歉搞混了。@Adam那么我们需要实际的代码。正如你所看到的,你的例子在我的小提琴中起作用。您的bug比您提供给我们的更复杂。我想就是这个。该函数是在这些元素出现之前定义的,因为页面内容是通过ajax加载的。我重构了代码以定义闭包中的变量,但没有分配它们。然后每次叫EatLinch时,我都会检查sandwiches.length是否为0。如果是这样,我将dom元素指定给三明治。这样,我只在第一次调用函数时支付dom的费用。