scope & context

by John Wick

JavaScript

/**
http://ryanmorr.com/understanding-scope-and-context-in-javascript/
**/
// closures...
function foo() {
    var localVariable = 'private variable';
    return function() {
        return localVariable;
    }
}

var getLocalVariable = foo();
console.log('getLocalVariable() =>',getLocalVariable());
console.log('getLocalVariable =>',getLocalVariable );

// module pattern
var Module = (function() {
    var privateProperty = 'foo';
    function privateMethod(args) {
        return 'this is private method that can be access!'
    }
    return {
        publicProperty: 'this is public prop',
        publicMethod: function(args) {
            return('this is public method');
        },
        privilegedMethod: function(args) {
            return privateMethod(args);
        }
    };
})();

m = Module
console.log('m =>',m);
console.log('m publicProperty =>',m.publicProperty );
console.log('m publicMethod() =>',m.publicMethod() );

try {
	m.privateMethod();
} catch(err) {
  console.log('cannot access privateMethod() ') 
}

console.log('m privilegedMethod() =>',m.privilegedMethod() );

/* 
immediately-invoked function expression (IIFE) */
var jj = (function(foobarz) {
    var foo, bar;
    function private() {
        // do something
    }
    foobarz.Module = {
        public: function() {
            // do something 
        }
    };
})(this);

console.log(jj );