Javascript scope

Lexical Scoping
JavaScript has lexical scoping with function scope.
The variables defined inside a function will not be accessible outside that function

//function scoped
function fun(){
var name;
console.log(name);
name = 'Mukul Latiyan';
}
fun(); // undefined
var obj = {prop: ""};
if(obj.prop) {
    console.log("property exist");
} else {
   console.log("property doesn't exist");  /// property doesn't exist //
}
var a = 1;
function abc() {
   console.log(a);  ///undefined
   console.log(foo());  ///Uncaught TypeError: foo is not a function
   var a = 5;
   console.log(a);
   var foo = function() {
      return 2;
   };
}
abc('abc', 7, 'delhi', 'india');

////////////////////////////////////////////////////////////

var a = 1;
function abc() {
    console.log(a); /// undefined
    console.log(foo()); /// 2
    var a = 5;
    console.log(a);   /// 5
    function foo() {
         return 2;
    };
}
abc('abc', 7, 'delhi', 'india');

var obj = {
    name: "abc", 
    city: "delhi", 
    getName: function() {
      return this.name;
   }},
var obj2 = {name: "def", city: "Haryana"};
var mearged = Object.assign(obj,obj2)