javascript - 无法访问关闭的 jQuery 对象的方法

标签 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)
        }
    };
}());

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/

相关文章:

javascript - 如何知道对象是否包含在我的 jquery 数组列表中?

javascript - 如何在 JavaScript 中暂停我的动画

ios - Swift 闭包和执行顺序

Javascript 闭包和 DOM 生成器

javascript - 如何从两个不同长度的数组javascript创建对象数组

javascript - 在 Javascript 中从字符串中删除给定值以及逗号

javascript - 根据当前 Div 更改链接样式

javascript - 如何迭代 DataTables 2.1 中的对象数组

javascript - 当数组内的可观察值之一发生更改时,更新父 knockout 可观察值数组项

javascript - Ember js 将 id 传递给绑定(bind)属性