Function and var declarations are hoisted, but initializations are not. let/const are hoisted too but live in the temporal dead zone until initialized.
Expanding on the short answer — what usually matters in practice:
A tiny example (an explanation template):
// Example: discuss trade-offs for "explain-hoisting-in-javascript.-what-is-hoisted-"
function explain() {
// Start from the core idea:
// Function and var declarations are hoisted, but initializations are not. let/const are hois
}