// why does javascript have hoisting?
As Stoyan Stefanov explains in "JavaScript Patterns" book, the hoisting is
result of JavaScript interpreter implementation.
The JS code interpretation is performed in two passes.
a) During the first pass, the interpreter processes
variable[NOT the initialitations] and function declarations.
b)The second pass is the actual code execution step. The interpreter processes
function expressions and undeclared variables.
Thus, we can use the "hoisting" concept to describe such behavior.