Hoisting

What is hoisting?

When a Javascript file is loaded, declarations are moved to the top of the code

 

 

Hoisting Example

console.log(lunch); //undefined
var lunch = 'orange chicken'

//var declaration
var lunch;

//var assignment
lunch = 'orange chicken';

//var declaration and assignment
var lunch = 'orange chicken';

//how JS interepts the order
//only the declaration is hoisted; not the assignment
var lunch;
lunch = 'orange chicken';

Always declare all variables at the beginning of every scope

Function Declarations ​  

  • begins with 'function' and no variable assignment

  • sibling of var declarations

  • are known before any code is run

  • are hoisted to the top

Function Expressions

  • Must not start with 'function'
  • part of a larger expression syntax
  • cannot call a function before it has been expressed
  • are NOT hoisted
function foo(){
 return 'hello';
}

foo();
var bar = function(){
 return 'world';

}

bar()

Function Declarations vs Function Expressions

Function Declarations 

function add(n1, n2){
  return n1 + n2;  
}
console.log(add(1,2)); // logs 3


console.log(subtract(5,3));  // logs 2
function subtract(n1, n2){
  return n1 - n2;
}

Function Expressions 

var add = function(n1, n2){
  return n1 + n2;
}
console.log(add(2, 3)); // logs 5

console.log(subtract(5, 2)); //error
var subtract = function(n1, n2){
  return n1 - n2;
}

Another Hoisting Example

//function declaration
add();
function add(n1, n2){
  return n1 + n2;
}

//How Javascript interepts it:
//function declaration gets hoisted to the top 
function add(n1, n2){
  return n1 + n2;
}
add();

//function expression
subtract()
var subtract = function(n1, n2){
  return n1 - n2;
}

//How Javascript interepts it:
//Only the variable declaration is hoisted to the top
var subtract;
subtract(); //error subtract is not a function
subtract = function(n1, n2){
  return n1 - n2;
}

What will be the result?

//Expression and Declaration
//What is the result of invoking five()?
var five = function(){
  return 5;
}
function five(){
  return 'five'
}
five(); //?

How it is interpeted

//Expression and Declaration
//How will this be interepted?
var five = function(){
  return 5;
}
function five(){
  return 'five'
}
five(); //?



//How the code is interpreted through hoisting
function five(){
  return 'five';
}

var five;
five = function(){
  return 5;
}
five(); // 5

Hoisting

By vic_lee

Hoisting

  • 329