javascript - Javascript 中的循环引用示例?

标签 javascript closures

我想知道是否有人在 javascript 中有一个很好的、有效的循环引用示例?我知道这对于闭包来说非常容易,但我很难全神贯注于此。非常感谢我可以在 Firebug 中剖析的示例。

谢谢

最佳答案

创建循环引用的一种简单方法是让一个对象在属性中引用自身:

function Foo() {
  this.abc = "Hello";
  this.circular = this;
}

var foo = new Foo();
alert(foo.circular.circular.circular.circular.circular.abc);

此处 foo 对象包含对自身的引用。

对于闭包,这通常更隐含,只是在范围内有循环引用,而不是作为某个对象的显式属性:

var circular;

circular = function(arg) {
  if (arg) {
    alert(arg);
  }
  else {
    // refers to the |circular| variable, and by that to itself.
    circular("No argument");
  }
}

circular("hello");
circular();

这里保存在 circular 中的函数引用了 circular 变量,因此也引用了它自身。它隐含地持有对自身的引用,创建一个循环引用。即使 circular 现在超出范围,它仍然从函数范围中引用。简单的垃圾收集器不会识别此循环,也不会收集该函数。

关于javascript - Javascript 中的循环引用示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1493453/

相关文章:

php - 欧芹表单未提交

javascript - Angular Js : Clicking a button selecting all buttons in ng-Repeat instead of one

javascript - 无法从 Angular 2 中的多选输入文本框中获取值

c# - 转换结构的算法(传递闭包?)

Javascript: 'closured' 变量的性能

javascript - 根据值合并两个不同长度的数组对象

javascript - 闭包:逐行解释 "Javascript: Good Parts"示例?

lisp - 在 Lisp 中如何调用函数列表中的函数?

rust - 如何将没有yield的闭包转换为生成器?

javascript - 动态调用javascript中对象的函数