看过很多篇各位大牛们关闭对闭包的理解,但是每次理解可以,事后再次想想恐怕都是又有很多不太清晰的地方,偶尔看到了一篇关于闭包很形象的理解,故分享下。
有一位公主......
论编程抽象能力的重要性....她生活在一个充满奇幻冒险的世界里, 她遇到了她的白马王子, 带着他骑着独角兽开始周游这个世界,与巨龙战斗,巧遇会说话的动物,还有其他一些新奇的事物。function princess() {
但是她不得不回到她的王国里,面对那些年老的大臣。var adventures = []; function princeCharming() { /* ... */ } //白马王子 var unicorn = { /* ... */ }, //独角兽 dragons = [ /* ... */ ], //龙 squirrel = "Hello!"; //松鼠 adventures.push(unicorn, dragons, squirrel, ....);
她会经常给那些大臣们分享她作为公主最近在外面充满奇幻的冒险经历。return {
但是在大臣们的眼里,总是认为她只是个小女孩......story: function() { return adventures[adventures.length - 1]; } }; }
....讲的是一些不切实际,充满想象的故事var littleGirl = princess();
即便所有大臣们知道他们眼前的小女孩是真的公主,但是他们却不会相信有巨龙或独角兽,因为他们自己从来没有见到过。大臣们只会觉得它们只存在于小女孩的想象之中。littleGirl.story();
但是我们却知道小女孩述说的是事实.......