A function in javascript forms a closure by keeping a (hidden) link to its enclosing scope.
Is it possible to access it programmatically when we have the function (as a variable value) ?
The real goal is theoretical but a demonstration could be to list the properties of the closure.
var x = (function(){
var y = 5;
return function() {
alert(y);
};
})();
//access y here with x somehow
That's (one of) the purpose(s) of a closure - to keep information private. Since the function already has been executed its scope variables are no longer available from outside (and have never been) - only the functions executed in it's scope (still) have access.
However you could give access via getters/setters.
You might want to take a look into Stuart Langridge's talk about closures. Very recommendable are also Douglas Crockfords Explanations. You can do lots of fancy stuff with closures;)
Edit: You have several options to examine the closure: Watch the object in the webdeveloper console or (as I do it often) return a debug-function which dumps out all the private variables to the console.
No, not unless you expose it:
var x = function(){
var y = 5;
return {
getY: function(){
return y;
},
setY: function(newY){
y = newY;
}
}
}
x.setY(4);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With