I’ve been a JavaScript developer for a while now, and I’ve always thought that the correct way to implement private members in JavaScript is to use the technique outlined by Doug Crockford here: http://javascript.crockford.com/private.html.
I didn’t think this was a particularly controversial piece of JavaScript wisdom, until I started using the Google Closure library. Imagine my surprise… the library makes no effort to use Crockford-style information hiding. All they do is use a special naming convention and note “private” members in the documentation. I’m in the habit of assuming that the guys at Google are usually on the leading edge of software quality, so what gives? Is there some downside to following Mr. Crockford’s advice that’s not obvious?
There are a lot of examples of pseudo-privacy in main-stream JavaScript libraries. Facebook Connect’s JavaScript library has the same structure.
The main reason developers go that route is for performance. Hiding things in closures can be slower and use more memory. Closure-hiding can also be less flexible, as true privacy can’t be carried between files without some clever hacks. Closure-hiding is more conceptually pure, IMO, but when performance is a concern, using pseudo-privacy is the way to go.
The other reason is that a lot of Google programmers have backgrounds in Python, where there are no private anythings and the underscore prefix is the accepted community standard.