I’m a little embarrassed to say that I only looked this up for the first time today. Although, I’ve been programming in JavaScript for so long that I must have known this years ago, but “forgotten” as I haven’t done much JavaScript programming in the last few years. Hey, at least I retained that niggling feeling like I had to look that up!
Important: JavaScript does not have block scope.
Basically:
var x = 1; { var x = 2; } print( x ); // outputs 2
Oh my. Bookmarked for future reference. I’ve always kind of wondered how attributes/fields and local variables worked in JavaScript whenever I really use it–but I never really checked it up. *lazy* So there _really_ is no difference. Eep. Must be really careful from now on. Thanks muchly, jj5!
No worries Key. :)
Hey Key, just to clarify, the block level scoping applies to local/global variables, not to attributes/fields. If you want to store an attribute/field you typically reference the object you want the attribute/field on, e.g. this.field = “value” or that.field = “value”. Local variables get stored in the function’s closure, which is a whole other topic. :P If you need to scope a variable you can create a new scope by creating a closure by creating and calling a local function, e.g.
var x = 1;
(function() { var x = 2; })();
print( x ); // outputs 1
But be careful, because:
(function() { x = 2; })(); // note: no ‘var’ keyword
print( x ); // outputs 2! (It modified the value in the containing scope)
Oh woops! Wrong terms I used! And thank you for the examples! I do remember having to use the var keyword twice when I had two variables with the same name so I understood them quickly. ^^ …When one uses such a clean-looking language like Python for a few days and then look back at something like JavaScript, the person cannot be faulted if their mind goes ‘processing wall of text. shutting down.’, yes?
Hehe. I for one much prefer JavaScript to Python, although I’ve been using JavaScript pretty intensively for a long time and have done close to nothing with Python. I just really like using curly brackets.. :P
I have some pretty seriously heavy-duty work to do with JavaScript on my plate now. I plan to port each and every one of the functions at http://phpjs.org/ to http://jsphp.co/ — so I’ll be battling some very complicated ‘wall of text’-like JavaScript functions in the near future.
Programmers truly are masochists. :P
Pingback: Python hat was on « Jenny's Blog