【问题标题】:Can it be disadvantageous to store jQuery objects in a variable?将 jQuery 对象存储在变量中是否不利?
【发布时间】:2009-08-17 09:56:12
【问题描述】:

我最近刚问了关于 jQuery chaning 的以下问题:

Is there a preferred way of formatting jQuery chains to make them more readable?

许多人回答说,也许我减少了语句中的链接数量,而是将对象存储在持有变量中,这对我来说很有意义。

但是,我的理解是,链中的对象已经保存在堆栈中(某种意义上的),那么将结果缓存/存储在变量中是否不能有效地重新存储它,使用更多内存?

对其中一篇帖子的评论似乎表明可能不会对性能造成太大影响(如果有的话),所以如果它更具可读性,我很乐意按照建议进行缓存。

而且,如果我们使用缓存,这不是开始限制.end().andSelf() 的有用性吗?

【问题讨论】:

    标签: javascript jquery chaining performance


    【解决方案1】:

    对象通常存储为引用 - 指向内存中位置的指针。两个变量都持有同一个对象,不会复制对象的所有数据——它们只是都持有指向实际对象数据所在的内存中相同位置的指针。因此,将对象存储在变量中根本不会对性能造成太大影响。没什么大不了的。

    【讨论】:

    • 有趣。因此,如果我将数字转换为字符串 - String(number),这也是一个引用吗?
    • 没有。 String(123) 返回一个字符串文字,而不是一个对象——因此不涉及引用。如果你想要一个 String 对象,你需要 new String(123) 来创建一个内容为 '123' 的新 String 对象。
    • 请注意, new String(123) 仍然返回一个文字,并且仍然没有涉及引用。不确定这是否清楚。只有对象、数组和函数可以是指针。
    • @mwilcox:不正确。请尝试以下操作:var a = String('123');a.test="blah";alert(a.test);,然后将其与 var a = new String('123');a.test="blah";alert(a.test); 进行比较 - 您会看到前者弹出“未定义”,而后者弹出“blah”。
    【解决方案2】:

    添加到@Dav 的答案中,有时将 jquery 对象存储在变量中会是一件好事。经典例子:

    $('#something div').each( function() {
        $(this).css({'background-color':'#afa'});
        // do some stuff;
        $(this).slideDown('fast');
    }
    

    更好的方法:

    $('#something div').each( function() {
        var $this = $(this);
        $this.css({'background-color':'#afa'});
        // do some stuff;
        $this.slideDown('fast');
    }
    

    这样可以避免在调用$创建 jquery 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 2020-08-15
      相关资源
      最近更新 更多