Function Scope means that any variable which is defined within a function is visible within that entire function not out side of the function.
function funScope () {
var iAmLocalScope = "I am Local";
console.log("Function local scope: " + iAmLocalScope);
}
funScope();
console.log(iAmLocalScope);
// -> "ReferenceError: iAmLocalScope is not defined
Block Scope, a variable scope is limited by the block where it is declared in. A block is usually means between {} curly braces or loop variables for(;;){}.It is not possible to create a block scope in javascript. And here the example
var i = 1; // <--- In here first i is define and initialize to 1
for (var i = 0; i < 10; i++) {
// <-- Here also define the same variable i with block for loop{}
}
console.log(i); // <-- 10
//if block scope exist then i value
//should print here 1 instead of 10.
But This behavior changes, when using the let declaration introduced in ECMAScript 2015.
var i = 1; // <--- In here first i is define and initialize to 1
for (let i = 0; i < 10; i++) {}
// <- using by let local scope create within block scope
console.log(i); // <-- Thats why i value is 1 instead of 10
Lexical Scoping(Static Scoping or Closure) : If a child function define and call within a parent function scope then child function can access all the local variable within the parent function scope even if the parent function has returned
var adder = function (loc) {
return function (summand) {
loc += summand;
console.log(loc);
};
};
// <- we call the annonymous function
// and assign the returned function to adder
var inner = adder(1); // -> Now local variabe loc == 1
inner(5); //-> Now local variabe loc == 6
inner(4); //->Now local variabe loc == 1