Diplomatic immunity through javascript

Would you love to be able to waltz in to a place, piss all over the floor, without anybody saying or doing anything to you? And what’s more: even if they wanted to punish you, you could make them  follow a process that you yourself defined. Haw haw!

Anonymous, self-executing functions can allow you to do this. They’re kind of like diplomatic immunity for your browser and can be very powerful.

    Oooh it's so cozy in here. I have access to all
    global variables but I can do what
    I like and no-one will know!
    Now I'm going to do some private things.

var privateVar = "I'm so lonely in here";
var privateFunction = function(s){ alert(s) };


Okay, maybe I want to share something with the
    outside world but let's namespace it just in case:


return namespace = {
           publicFunction : function(q){
               return function(a) {
                privateFunction(q + privateVar + a)


We can’t access any of the private variables or functions from outside our anonymous function, thus avoiding collisions and overwriting, but we can return public functions that do! namespace.publicFunction is able to see, use and modify our private variables, but only in the way in which we want it.

It’s even possible to throw a bit of curry in there to spice it up. Calling namespace.publicFunction and passing it an argument (in this case a question) returns another anonymous function that expects an argument (an answer) and will then use our private variables to construct a little dialogue.

We would call it like this:

namespace.publicFunction("How are you?n")("nThat's too bad");

The example is basic and doesn’t make much practical sense but it demonstrates the way scope works in javascript and it can be a simple but handy tool to have in your arsenal.

Leave a Reply

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit /  Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit /  Bijwerken )


Je reageert onder je Twitter account. Log uit /  Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit /  Bijwerken )

Verbinden met %s