In JavaScript, function declarations are hoisted to the top of their scope before the code runs. This means you can call a function before it appears in the code. For example, calling greet() before the function greet() is declared works because the function is stored in memory during parsing. The execution table shows parsing and hoisting first, then calling the function, then outputting the result. Variables holding function declarations have their function assigned at the start. However, if you use a function expression assigned to a variable, only the variable is hoisted as undefined, not the function itself. Calling it before assignment causes an error. This behavior helps understand why some functions can be called early and others cannot.