Function declaration
func1(); // works properly
// func2(); // not defined
function func1() {
console.log("func1");
func2(); // works properly
function func2() {
console.log("func2");
}
func2(); // works properly
}
func1(); // works properly
// func2(); // not defined
They are hoisted, which means the declaration is “moved” to the top of the scope.
Function expression
// func1(); // not defined
// func2(); // not defined
const func1 = function() {
console.log("func1");
// func2(); // not defined
const func2 = function() {
console.log("func2");
}
func2(); // works properly
}
func1(); // works properly
// func2(); // not defined
They aren’t hoisted, which means the declaration is NOT “moved” to the top of the scope.