Osobiście nie wiem jaka jest zaleta hoistingu w przypadku zmiennych tworzonych słówkiem var - tym bardziej, że hoistowany jest sam identyfikator zmiennej, bez przypisanej wartości (stąd odwołując się do zmiennej przed miejscem jej deklaracji otrzymuje się undefined). Natomiast jest to o tyle przydatne przy funkcjach tworzonych słówkiem function, że można wizualnie ukryć implementację funkcji niżej w skrypcie - zaś używać jej wyżej - co może poprawić czytelność kodu; choć pewnie zależy to od konwencji przyjętej w projekcie.
Można tu przytoczyć wypowiedź twórcy JavaScript, Brendan'a Eich'a:
function hoisting allows top-down program decomposition, 'let rec' for free, call before declare; var hoisting tagged along
+
var hoisting was thus unintended consequence of function hoisting, no block scope, JS as a 1995 rush job. ES6 'let' may help
Z tego wynika, że hosting dla var powstał jako niezamierzona konsekwencja dla hostingu funkcji; a hosting tych drugich pozwala rozdzielić program na część górną i dolną, gdzie najpierw można wywołać funkcję, a potem ją utworzyć.