DEV Community

Bellotaiwo
Bellotaiwo

Posted on • Edited on

Variable Declaration in Javascript

Quick Summary: in this article, we are going to learn about how to declare and name variables, block scoping, hoisting, redeclaration as well as the rules and conventions that guide declaring a variable. By the end, you will understand how to declare variables, the concept behind block scoping, redeclaration, and hoisting in javascript.

variables are an important part of the programming language. In general, variables are ways of storing data(value).

Rules Guiding Variable Names

  • variable names can only include letters, numbers, underscore(_), dollar sign($).
  • variable names cannot start with a number.
  • variable names are case sensitive. Meaning, letter "a" is considerably different from the letter "A".
  • Reserved words (like JavaScript keywords e.g function) cannot be used as variable names.

Declaring Variables

Before Es6, var keyword was the only way to declare a variable and it is problematic and it has caused a lot of bug issues in cases of scope, hoisting, and redeclaration. while Let and const were introduced in Es6 and came to solve those problems.

var name = 'Taiwo'
Enter fullscreen mode Exit fullscreen mode

Const

const as the name suggests constant, A constant is a variable that cannot be overwritten. Once declared, you cannot change its value.

const name = 'John'
console.log(name)  // John
name = 'Taiwo'  //TypeError: Assignment to constant variable.
Enter fullscreen mode Exit fullscreen mode

A variable has a default value if no value is assigned to it but const has no default value and it requires an initializer.

var name; // undefined

const name;  // SyntaxError: Missing initializer in const declaration
Enter fullscreen mode Exit fullscreen mode

Let

The Let keyword allows mutability and it doesn't require an initializer just like var.

let name = 'Taiwo'
name = 'John'
console.log(name)  // John

// it defaults to undefined without an initializer
let name;  // undefined
Enter fullscreen mode Exit fullscreen mode

Block Scope

Block scope is an area between two curly braces {} which can be between if, switch conditions, or for and while loops.

The var keyword is function scope and it doesn't have a true block scope because variable declared with var jumps out of the block and it can be accessed outside the scope.

var name = 'john';

if (name) {
    var name = 'Taiwo';
    console.log('block scope', name); // block scope Taiwo
}
console.log('global scope', name); // global scope Taiwo
Enter fullscreen mode Exit fullscreen mode

The let and const came to solve this, they have a true block scope because they exist only within the block they are declared in.

let name = 'john';
if (name) {
    let name = 'Taiwo';
    console.log('block scope', name); // block scope Taiwo
}
console.log('global scope', name); // global scope john
Enter fullscreen mode Exit fullscreen mode

Redeclaration

var allows you to redeclare a variable as many times as you like.

function addScore (){
    var score = 55
    if (score > 50){
       var score = 70
       console.log('Your score is', score) //Your score is 70
    }
    var score = 80
    console.log('Your score is', score) //Your score is 80
}
Enter fullscreen mode Exit fullscreen mode

let and const don't allow redeclaration within the same block. Redeclaring a variable would result in an error.

function addScore (){
    let score = 55
    if (score > 50){
        let score = 70
        console.log('Your score is', score) //Your score is 70
    }
    let score = 80 //SyntaxError: Identifier 'score' has already been declared
}
}
Enter fullscreen mode Exit fullscreen mode

Hoisting

Hoisting is the javascript default behavior of moving all declarations to the top of the current scope before code execution.
var variables are hoisted. with var, you can use a variable before you declare it.

name = 'Taiwo'
console.log(name) // Taiwo
var name
Enter fullscreen mode Exit fullscreen mode

Note: javascript only hoist declarations, not the initializations.

In the case of the code above, only the var declaration is moved to the top of the function, not the initializer attached to it (the 'Taiwo' part of var name).

let and const are also hoisted but they are hoisted differently compared to var. With let and const you can't use a variable until its declaration is processed.

name = 'Taiwo'
console.log(name) // ReferenceError: Cannot access 'name' before initialization
let name
Enter fullscreen mode Exit fullscreen mode

let and const use the concept of Temporal Dead Zone(TDZ). It is a period within the code execution where the variable cant be used at all. Therefore, let and const variables exist in the TDZ from the start of their enclosing scope until they are declared. Meaning the variable cannot be accessible until it's been declared.

Conclusion

var has been deprecated. it is advisable to always use let in place of var to avoid unforeseen errors. And always use const to declare constants.

Top comments (0)