what is closure hosting and scope in javascript

Atiq ur rehman
2 min readMar 13, 2023

In JavaScript, a closure is a function that has access to the variables in its outer lexical environment, even after that outer environment has returned. Closures are created whenever a function is defined inside another function.

Scope refers to the set of variables, functions, and objects that are accessible in a particular part of a program. In JavaScript, scope is determined by where variables and functions are defined and where they are used.

Hosting is a term used to describe how JavaScript moves variable and function declarations to the top of their respective scopes during the compilation phase, before the code is actually executed. This means that you can use a variable or function before it has been declared, and it will still work, because JavaScript has already “hoisted” it to the top of the scope.

So, in summary:

  • Closure: a function that has access to the variables in its outer lexical environment, even after that outer environment has returned.
  • Scope: the set of variables, functions, and objects that are accessible in a particular part of a program, determined by where they are defined and used.
  • Hosting: the process by which JavaScript moves variable and function declarations to the top of their respective scopes during compilation.

Examples:

Closure:

function outerFunction() {
const outerVar = "I am outside!";
function innerFunction() {
const innerVar = "I am inside!";
console.log(outerVar); // Logs "I am outside!"
}
return innerFunction;
}
const myFunc = outerFunction();
myFunc(); // Logs "I am outside!"

In this example, innerFunction has access to the outerVar variable, even though it is defined in the outer function outerFunction. When outerFunction is called and returns innerFunction, myFunc is assigned to innerFunction, and when myFunc is called, it still has access to outerVar.

Scope:

const globalVar = "I am global!";
function outerFunction() {
const outerVar = "I am outer!";
function innerFunction() {
const innerVar = "I am inner!";
console.log(globalVar, outerVar, innerVar); // Logs "I am global!", "I am outer!", "I am inner!"
}
innerFunction();
}
outerFunction();

In this example, there are three variables defined: globalVar, outerVar, and innerVar. globalVar is defined in the global scope, so it is accessible anywhere in the program. outerVar is defined in the scope of outerFunction, so it is accessible in outerFunction and any functions defined inside of it. innerVar is defined in the scope of innerFunction, so it is only accessible within that function.

Hosting:

console.log(myVar); // Logs undefined
var myVar = "I am hosted!";

In this example, myVar is declared and initialized on the same line, but because of hoisting, the declaration is actually moved to the top of the scope by JavaScript before the code is executed. So, when console.log(myVar) is called, myVar exists but has not been assigned a value yet, so it logs undefined.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Atiq ur rehman
Atiq ur rehman

No responses yet

Write a response