Say I have this anonymous function:
(function(window){
var private = 'private msg';
function sayit() {
alert(private) // works
}
document.body.onclick = sayit; // works
})(window);
// private shouldn't be accessible here
Is this how JavaScript should behave?
That is, there is no way to access private
from anywhere outside of that anonymous function?
If so, is it possible to find some kind of hack to access private
from the outside, leaving the code the way it is?
That's the whole point of having scope and private variables
Either
Set the private value to a global variable?
or
declare the variable outside
You would have to do something like this:
Ok. I got it.
After you click body, you can get 'private msg' from
extracted
Yes, this is how Javascript lets you have 'private' variables (hidden in a function scope).
No, there's no hack available to access variables such as
private
without re-writing the code.Variables defined with
var
within a function can be accessed only from within that function.They aren't intended as "private" variables; that's just how closures work. You can do the same thing in Perl and Python, at the very least, and probably a great many other languages with closures and lexical scoping.
Debuggers like Firebug or Chrome Inspector can still show you the entire stack at any point (including closed-over variables), but other than that and without changing the original code, I think you're out of luck.
Perhaps if you told us your actual problem... :)