我想知道是否有人在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
现在超出范围,它仍然从函数范围引用.简单的垃圾收集器将无法识别此循环,也不会收集该函数.
甚至更简单,一个"包含"自身的数组.见例子:
var arr = []; arr[0] = arr;
window.onload = function() { hookup(document.getElementById('menu')); function hookup(elem) { elem.attachEvent( "onmouseover", mouse); function mouse() { } } }
如您所见,处理程序嵌套在attacher中,这意味着它在调用者的范围内是封闭的.
可能是定义循环对象的最短方法.
a = {}; a.a = a;