I was wondering if anyone has a good, working example of a circular reference in javascript? I know this is incredibly easy to do with closures, but have had a hard time wrapping my brain around this. An example that I can dissect in Firebug would be most appreciated.
Thanks
Probably the shortest way to define a cyclic object.
As you can see, the handler is nested within the attacher, which means it is closed over the scope of the caller.
You can do:
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()
A simple way to create a circular reference is to have an object that refers to itself in a property:
Here the
foo
object contains a reference to itself.With closures this is usually more implicit, by just having the circular reference in scope, not as an explicit property of some object:
Here the function saved in
circular
refers to thecircular
variable, and thereby to itself. It implicitly holds a reference to itself, creating a circular reference. Even ifcircular
now goes out of scope, it is still referenced from the functions scope. Simple garbage collectors won't recognize this loop and won't collect the function.Or even simpler, an array "containing" itself. See example:
Or using ES6: