代码之家  ›  专栏  ›  技术社区  ›  Drew

参考回路

  •  1
  • Drew  · 技术社区  · 15 年前

    var a = {
      x: 1,
      y: 2 };
    
    var b = {
      z: 3,
      refA = a };
    
    a.refB = b;
    

    我倾向于这种行为是丑陋的。所以我个人对这种编码充其量也有异议。您不需要有这些类型的引用,这会导致代码难以理解。

    然而,是否有人认为这样做是一种技术上的惩罚。

    5 回复  |  直到 15 年前
        1
  •  2
  •   Kevin Lacquement    15 年前

    一些数据结构需要相互引用(您称之为引用循环)。许多树都有从父级指向子级的链接,反之亦然;双链接列表有一个 prev next 指针。

        2
  •  1
  •   hvgotcodes    15 年前

    Javascript是一种动态语言。您所描述的,在运行时添加属性,是本例中的一个特性。

        3
  •  1
  •   Hemang    15 年前

    我不认为引用循环应该受到任何惩罚。在某些情况下,这也是需要的。例如,客户和帐户对象。在account对象中,您将引用customer(一个或多个),而在customer中,您需要引用account(也可以是多个)

        4
  •  0
  •   Björn    15 年前

    它被称为循环引用,在某些方面是必要的或无法避免的。最好的例子是一本普通的字典,你可以用其他单词解释一个单词的意思。或链表。

    所以取决于你的用例,它可能是好的也可能是坏的。

        5
  •  0
  •   Breakskater    15 年前

    没有性能惩罚。循环引用只是彼此的指针,而不是副本。像其他人提到的那样,有时需要循环引用。大多数继承结构使用循环引用来表示父/子关系。有时孩子需要了解父母,父母也需要了解孩子。可以说,这使得在等级阶梯上走来走去变得很容易。