Also, today I found JSLint. It's hardly new, but somehow it had never reached my radar before. If you've use lint, the C code nanny, you'll know what to expect: it pulls a fine-toothed comb through your code and picks out all those things which might not actually stop your code from running, but which are Bad anyway, like undeclared variables, missing semicolons etc.
I think the crassly-named Web 2.0 movement is having some great effects here - people are waking up to the fact that JS is actually a really nice, powerful, dynamic language, not just a toy syntax for DOM fiddling. Having functions as first-class objects really shows that the designers were thinking about expressiveness when they wrote it. Of course, it took some time for the libraries to catch up, but now we have a plethora of fantastic and mostly open source frameworks. Shining brightest among them at the moment is JQuery, which takes the concept of anonymous delegation with JS functions and turns it into your main paradigm.
The JQuery-based JS code I've just written is about 150 lines, across 6 functions. Would you care to guess how many local variables there are in that lot? The answer is three. That may not be a very useful metric on its own, but it's deeply indicative of how much JQuery lets you write code in the order you need it, so you don't have to keep swathes of local variables hanging around for later use.