To know more bout execution context and lexical environment read here
Used in higher order functions read here
var counter = (function() {
var count = 0;
function increment() {
count += 1;
}
return {
increment: function() {
increment(1);
},
getValue: function() {
return count;
}
}
})();
function multiplier(num){
return function (multiplier){
return num * multiplier
}
}
var double = multiplier(2)
var triple = multiplier(3)
double(3) // 6
triple(3) // 9
//module
function Student(_name,_marks) {
var username = _name;
var marks = _marks;
function get_user() {
console.log(username);
}
function calculate_marks() {
console.log(marks.reduce((all, item) => (all += item)));
}
return {
get_user: get_user,
calculate_marks: calculate_marks
};
}
var s1 = Student('s1',[10,20,30]);
s1.get_user(); // s1
s1.calculate_marks(); // 60
Memoization
