3. What is hoisting in JavaScript? Provide an example?

Example 1: js hoisting

/*Hoisting is JavaScript's default behavior of moving 
all declarations to the top of the current scope (script or function).
Be carefull that only declaration gets hoisted NOT the initialitations*/

var x = 5;
alert("x is  = "+x+". y is = "+y);//result => x is = 5. y is = undefined.
var y = 7;

/*
note that the code doesn't produce the error "y is not defined" like
it would if we would omit y. It executes but not in the way you would want.
*/

Example 2: function hoisting in js

console.log(functionBelow("Hello"));
function functionBelow(greet) {
   return `${greet} world`;
}
console.log(functionBelow("Hi"));