As far as best practices go, the common approach to optimize page loading is to bundle all of your JS resources, due to the constrained number of connections towards a single domain as Jarrod mentioned, and setting a far future expires header in the response.
What CDNs bring to such a mix, especially the popular ones, as Jarrod pointed out also, is that the user would have already previously accessed the URL and can retrieve the JS resource immediately from his client's cache without even requiring to establish a connection.
To that effect, if we all used CDNs and employed best practices, we can save the user from retrieving an additional ~10-50KB when they initially access our URLs and allow them to load their pages faster.
I would strongly recommend to use CDNs for two reasons: the cons Jarrod mentioned are there, true, but completely insignificant and if your already bundling your sources into a single document, you'll force everyone to retrieve, say, the static jQuery portion of the document (~33KBs) every time you update one of the bundled resources.
I don't know how important that sounds to you, but with huge user bases this leads to a significant bandwidth cut and significant savings, bot of which we can divert to more pressing matters, such as streaming porn and buying beers.