Tuesday 17 December 2019

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

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...