Skip to content

Instantly share code, notes, and snippets.

@sgnl
Last active January 21, 2021 18:36
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save sgnl/9a168d695373f09f64d5dee7d985bd99 to your computer and use it in GitHub Desktop.
Save sgnl/9a168d695373f09f64d5dee7d985bd99 to your computer and use it in GitHub Desktop.
Closures - Princess Story

from http://stackoverflow.com/questions/111102/how-do-javascript-closures-work/6472397#6472397

I'm a big fan of analogy and metaphor when explaining difficult concepts, so let me try my hand with a story.

Once upon a time:

There was a princess...

function princess() {

She lived in a wonderful world full of adventures. She met her Prince Charming, rode around her world on a unicorn, battled dragons, encountered talking animals, and many other fantastical things.

var adventures = [];

function princeCharming() { /* ... */ }

var unicorn = { /* ... */ },
    dragons = [ /* ... */ ],
    squirrel = "Hello!";

But she would always have to return back to her dull world of chores and grown-ups.

return {

And she would often tell them of her latest amazing adventure as a princess.

        story: function() {
            return adventures[adventures.length - 1];
        }
    };
}

But all they would see is a little girl...

var littleGirl = princess();

...telling stories about magic and fantasy.

littleGirl.story();

And even though the grown-ups knew of real princesses, they would never believe in the unicorns or dragons because they could never see them. The grown-ups said that they only existed inside the little girl's imagination.

But we know the real truth; that the little girl with the princess inside...

...is really a princess with a little girl inside.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment