Saturday 12 March 2016

What is a practical use for a closure in JavaScript?



I'm trying my hardest to wrap my head around JavaScript closures.



I get that by returning an inner function, it will have access to any variable defined in its immediate parent.



Where would this be useful to me? Perhaps I haven't quite got my head around it yet. Most of the examples I have seen online don't provide any real world code, just vague examples.




Can someone show me a real world use of a closure?



Is this one, for example?



var warnUser = function (msg) {
var calledCount = 0;
return function() {
calledCount++;
alert(msg + '\nYou have been warned ' + calledCount + ' times.');

};
};

var warnForTamper = warnUser('You can not tamper with our HTML.');
warnForTamper();
warnForTamper();

Answer



I've used closures to do things like:




a = (function () {
var privatefunction = function () {
alert('hello');
}

return {
publicfunction : function () {
privatefunction();
}
}

})();


As you can see there, a is now an object, with a method publicfunction ( a.publicfunction() ) which calls privatefunction, which only exists inside the closure. You can NOT call privatefunction directly (i.e. a.privatefunction() ), just publicfunction().



Its a minimal example but maybe you can see uses to it? We used this to enforce public/private methods.


No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...