Honestly, each placement has it's own 'job' -- and depending on what I want it to do is likely where I'll place it. For example, if a script is running at 'onload' it doesn't matter where you put it, it can't execute until everything else is done... if it's a library that has to be loaded before it can be run in the first few lines of BODY, putting it right before /BODY means it's going to break... on the other hand if it's going to modify markup and you want it to run BEFORE onload as it say... modifies the markup in a manner you want applied before CSS loads (that way you only get one FOUC instead of TWO), then it goes before /BODY.
The last of those is the real reason I often put scripting right before </body> -- FOUC is bad enough for CSS or images applied via the CSS, without something like dynamic content or scripted controls suddenly popping in AFTER the CSS is applied -- waiting for onload can literally be like a second "Flash of unstyled content". (part of why I don't really use onload anymore)
This is one of those cases where I think people are looking for a "always do this" which is the wrong question. It's just not that simple an answer and is part of why it's called "work" and not "happy happy fun time".