[Javascript] Hoisting

We already know Hoisting

When we write Javascript code, the variables could be used within their scope before they are declared, thanks to hoisting. This feature allows for convenient coding, but it also requires caution as it can lead to unexpected erros and bugs.

Javascript hoisting refers to the behavior where variable and function are moved to the top of their containing scope during the compilation phase. This allows variables and functions to be used before they are declared in the code.

Let’s take a look into variable hoisting first.

Variable Hoisting

The hoisting of keywords var, let, and const works differently.

  • var Keyword: Variables declared with var are hoisted to the top of their function or global scope. However, only the declaration is hoisted, not the initialization.
console.log(myVar); // undefined
var myVar = 5;
console.log(myVar); // 5

  • let and const Keywords: Variables declared with let and const are also hoisted but remain in a “temporal dead zone” from the start of the block until the declaration is encountered. Accessing them before the declaration results in a ReferenceError.
console.log(myLet); // ReferenceError: Cannot access 'myLet' before initialization
let myLet = 5;
console.log(myLet); // 5

Function hoisting

Let’s dive into function hoisting. In JavaScript, how functions are hoisted can impact how and when you can use them in your code. Knowing the difference between function declarations and expressions is key to avoiding errors.

  • Function Declaration: Function declarations are hoisted completely, meaning both the declaration and the definition are moved to the top of their scope.
myFunction(); // "Hello, World!"

function myFunction() {
    console.log("Hello, World!");
}

  • Function Expressions: Function expressions are not hoisted. If you try to call a function expression before it is defined, it will result in a TypeError.
myFunc(); // TypeError: myFunc is not a function

var myFunc = function() {
    console.log("Hello, World!");
};

Conclusion

As we can see from the explanations above, understanding hoisting is crucial for writing predictable Javascript code. While var hoisting can be lead to unexpected behavior, using let and const can help mitigate some issues due to their bloc-scoped natuire adn the temporal dead zone. Additionally, being aware of how function declaration and expressions are hosited can prevent common pitfalls in Javascript programming

Leave a Reply

Your email address will not be published. Required fields are marked *