我应该存储对嵌套对象的引用还是直接使用它?

时间:2018-08-08 10:26:09

标签: javascript reference

我认为如果您选择其中任何一个,这几乎不会对性能产生影响,但是我想知道使用两者中的哪一种更好。

鉴于我有:

    var a = { b: {c: { d: ... }}};
    var ref = a.b.c.d;

我应该直接使用a.b.c.d还是创建并使用引用(这里称为“引用”)?

此外,如果有一个getter函数可以返回具有多个复杂程度的对象:

    var a = { b: {c: { d: ... }}};
    function getObject() {
      return a;
    }
    var ref = getObject();

getObject()。b.c.d和ref之间有区别吗?

我知道这并不重要,但是我的OCD不允许我休息。 :D

2 个答案:

答案 0 :(得分:1)

像这样的属性访问会带来很小的开销。
使用d变量直接访问ref会更快。

现在的重点是:什么时候属性访问开销大于声明新变量的开销?
最后,选择最适合自己的东西。两者都不会导致明显的性能差异。

答案 1 :(得分:1)

  

JavaScript我应该存储对嵌套对象的引用还是直接使用它?

这几乎完全取决于具体情况。通常,编写任何最清晰的代码,而不用担心效率,直到/除非您面前有需要解决的性能问题。

重新输入您的第一段代码:

访问对象的属性花费的时间不为零,但是在现代浏览器中,它非常有效。因此,使用ref而不是a.b.c.d会更快,但是除非您要在紧密的循环中连续执行数十万次,否则在编写的任何代码中都不太重要。担心的话,如果您这样做的话。

要考虑的另一件事是其他代码是否可以修改abc,以使ref === a.b.c.d不再为真。如果您希望代码看到这些更改,请不要使用ref。如果您希望它免受此类更改的影响,请使用ref,即使ref可能已过时。

再输入第二个片段:

有一个很大的不同:如果您改用getObject,则稍后不会调用ref。如果您知道要继续使用最初返回给您的对象getObject,并且/或者想要避免重复调用的开销,请使用ref。但是推测getObject存在是有原因的,因此在某些情况下,再次使用getObject可能更有意义。实际情况取决于具体情况。