DeployU
Interviews / Frontend Engineering / What is the difference between `let`, `const`, and `var` in JavaScript?

What is the difference between `let`, `const`, and `var` in JavaScript?

conceptual Core Concepts Interactive Quiz Code Examples

The Scenario

You are a frontend engineer at a social media company. You are writing a new feature that needs to declare a variable.

You are not sure whether to use let, const, or var.

The Challenge

Explain the difference between let, const, and var in JavaScript. What are the pros and cons of each approach, and which one would you choose for this use case?

Wrong Approach

A junior engineer might think that they are interchangeable. They might not be aware of the difference in scope or the fact that `const` creates a read-only reference to a value.

Right Approach

A senior engineer would be able to provide a detailed explanation of the differences between `let`, `const`, and `var`. They would also be able to explain the trade-offs between each approach and would have a clear recommendation for which one to use in a given situation.

Step 1: Understand the Key Differences

Featurevarletconst
ScopeFunction-scoped.Block-scoped.Block-scoped.
HoistingHoisted and initialized with undefined.Hoisted, but not initialized.Hoisted, but not initialized.
Re-declarationCan be re-declared.Cannot be re-declared in the same scope.Cannot be re-declared in the same scope.
Re-assignmentCan be re-assigned.Can be re-assigned.Cannot be re-assigned.

Step 2: Choose the Right Tool for the Job

In modern JavaScript, you should almost always use const by default. This is because it creates a read-only reference to a value, which can help to prevent bugs.

If you need to re-assign a variable, you should use let.

You should almost never use var.

Step 3: Code Examples

Here are some code examples that show the difference between the three approaches:

var:

function myFunction() {
  var x = 1;
  if (true) {
    var x = 2; // This will overwrite the previous x
    console.log(x); // 2
  }
  console.log(x); // 2
}

let:

function myFunction() {
  let x = 1;
  if (true) {
    let x = 2;
    console.log(x); // 2
  }
  console.log(x); // 1
}

const:

const x = 1;
// This will raise an error
// x = 2;

Practice Question

You need to declare a variable that will not be re-assigned. Which of the following would you use?