javascriptclosuresterminology

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();

Solution

  • 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().

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