There are good an bad reasons to do it.
GOOD) If the script is not critical to the construction of your page DOM, it is good to do it as late as possible as Jim Puls suggests, usually at the very bottom of the page in the root BODY node. This is good because it allows the XHTML to render immediately, creating a psychological effect that the page "loads faster." In reality, it is loading at the same speed except that the browser isn't spending CPU cycles downloading, interpreting, and running the JS while the user stares at a white browser window.
BAD) Script tags are typically downloaded an interpreted in the order which they are enclosed. This means that you need to manage carefully the order in which they are included. Also, because they load serially (one at a time), you pay a high cost for each additional file you reference because the browser has to establish connection, check cache, download, etc. Tricks such as IE's "DEFFER" are not standard. For this reason, I would highly recommend packing your javascript into a single file when you go from development to production so that users do not have to make multiple connections in serial. Also make sure you have gzip compression turned on.
GOOD) There is a way to lazy-load scripts using AJAX -- you call your sever asking for the JS, and raise an event when the file is loaded. You can then call eval on it (or some safer variant) which brings its symbols into scope. This allows parallel downloads of script.
GOOD & BAD) In IE, you must avoid manipulating the DOM tree before the DOM has fully loaded. Look up the 'dom:loaded' event for this.