我不知道是否有人在javascript中的循环引用的好,工作的例子吗? 我知道这是令人难以置信的容易倒闭的事,但有一个很难包装我的大脑解决这个问题。 我可以在Firebug剖析一个例子是最赞赏。
谢谢
我不知道是否有人在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() { } } }
正如你所看到的,处理程序嵌套在附加器,这意味着它是在调用者的范围之内关闭。
也许最短的方式来定义一个循环对象。
a = {}; a.a = a;
或使用ES6:
class Circular {
constructor() {
this.value = "Hello World";
this.self = this;
}
}
circular = new Circular();
你可以做:
window.window...window
var circle = {}; circle.circle = circle;
var circle = []; circle[0] = circle; or circle.push(circle)
function Circle(){this.self = this}; var circle = new Circle()
var b = [];
var a = [];
a[0] = b;
b[0] = a;
打印a
或b
将返回Circular
。
function circular(arg){
var count = 0;
function next(arg){
count++;
if(count > 10) return;
if(arg){
console.log('hava arg: ' + arg);
next();
}else{
console.log('no arg');
next('add');
}
}
next();
}
circular();
圆形和一个瓶盖。