Namespaces, private methods and variables within closures
by lasha
JavaScript
var foo = (function(){
// Create a private variable
var name = "Spock";
// Create a private function
var greeting = function() {
var isThisHidden = "nested within function";
return {
name: "Hello " + name,
hiddenVar: isThisHidden // if this isn't returned, "isThisHidden" var stays hidden/private
};
};
// Return an object that exposes our greeting function publicly
return {
greeting: greeting,
hiddenName: greeting().hiddenVar
};
})();
// console.log(foo.greeting() === "Hello Spock"); // true because a reference to greeting() function is returned.
// console.log(foo.name); // undefined because "name" is private
// console.log(foo.greeting);
// console.log(foo.greeting().hiddenVar); // accesses var isThisHidden via returned hiddenVar
console.log(foo.hiddenName); // accesses var isThisHidden because "hiddenName" executes greeting() and pulls hiddenVar.
var foo2 = {
name: "Spock",
lastName: function() {
var surename = prompt("enter last name please");
return surename;
},
greeting: function() {
//return "Hello " + foo2.name + " " + foo2.lastName();
return "Hello " + foo2.name;
}
};
//console.log(foo2.greeting());