Variable hoisting is a topic that gets me unreasonably and disproportionally agitated, so I guess this post gives me another excuse to rant.
Variable hoisting isn't a thing. At least not in the sense that there's specific code in a javascript compiler that's re-writing all of your functions so the variable declarations are at the top.
Its a name given to an artefact of lexical scoping. All lexically scoped languages exhibit the exact same behaviour. But I've only ever seen the term used when talking about javascript, and there are lots of articles out there about it.
Why? Because of the way it interacts with undefined variables. In most of the other languages (anyone know of an exception?), if you try to reference the variable before its been declared (or definitely assigned a value), you'll get an error. For statically compiled languages, that will tend to be a compiler error, for the rest it will be an exception or other runtime