はじめに
この記事ではHTMLに記述するscriptタグが、なんでbodyタグの最後に書かれているのか、その理由を説明します。
ページの表示速度を速くするため
scriptタグがbodyタグの最後に書かれている理由は、ページの表示速度を速くするためです。
ブラウザでは、ページを表示する前にHTMLを解析してDOMツリーを構築します。
解析処理の途中でスクリプトが出てくるたびに、HTMLの解析を途中で停止して、スクリプトを実行します。
もし外部のスクリプトを利用していて、そのスクリプトの読み込みに時間が掛かると、ページが表示されるまでの時間が長くなってしまいます。
HTMLの解析を先に終わらせてページを表示してから、JavaScriptを読み込ませた方が、ページの表示までの時間が短くなるため、bodyタグの最後にscriptタグが書かれているのです。
参考
次のGoogleのドキュメントにもあるように、JavaScriptをインライン化したり、asyncを使って非同期にして、ページのレンダリングがブロックされないようにする方法もあります。

レンダリングを妨げる JavaScript を削除する | PageSpeed Insights | Google Developers