// Instead of using... var MyCoolThing = { i: 0, increment: function() { MyCoolThing.i++; }, decrement: function() { MyCoolThing.i--; } }; // ...for a simple object, one might use... var MyCoolThing = function() { var i = 0; return { increment: function() { i++; }, decrement: function() { i--; } }; }(); // ...to keep the i property private from the final object and so that one // doesn't have to always type "MyCoolThing." in front of everything. What // affect does this have on browser compatability? Any that one cares about (if // it breaks Netscape 4, I think I'll live)? // // I often also see... var MyCoolThing = (function() { var i = 0; return { increment: function() { i++; }, decrement: function() { i--; } }; })(); // ...with ( ) around the function() { ... }. What affect does this have? It // doesn't seem to make a difference with how it functions. // // I've noticed that .toSource() on an object adds ( ) around function methods // (and around the object itself). // // Is using ( ) correct, with the JS interpreter just implying it when the // coder doesn't put it there (like the ; at the end of a line)? // // Is it just used to show people reading the code that it's going to be a // closure and not a function (should it be called a closure or something else // in this case?), without mattering to the JS interpreter?