JavaScript关闭如何工作?
你如何将JavaScript闭包解释给懂得它们构成的概念的人(例如函数,变量等),但不明白闭包本身?
我已经看到维基百科给出的Scheme示例,但不幸的是它没有帮助。
适合初学者的JavaScript闭包
由Morris在星期二提交,2006-02-21 10:19。 自社区编辑。关闭不是魔术
本页面介绍了闭包,以便程序员能够理解它们 - 使用正在运行的JavaScript代码。 它不适用于大师或功能性程序员。
一旦核心概念得到修复,关闭并不难理解。 但是,通过阅读任何有关他们的学术论文或学术导向的信息,他们是不可能理解的!
本文面向具有某种主流语言编程经验的程序员,他们可以阅读以下JavaScript函数:
function sayHello(name) {
var text = 'Hello ' + name;
var say = function() { console.log(text); }
say();
}
sayHello('Joe');
无论何时在另一个函数中看到函数关键字,内部函数都可以访问外部函数中的变量。
function foo(x) {
var tmp = 3;
function bar(y) {
console.log(x + y + (++tmp)); // will log 16
}
bar(10);
}
foo(2);
前言:当问题是:
就像老艾伯特说的那样:“如果你不能解释给六岁的孩子,你自己真的不理解它。”好吧,我试着向一位27岁的朋友解释JS封锁,并且完全失败了。
有人可以认为我对这个主题感兴趣吗?
我很确定我是唯一一个试图从字面上理解最初问题的人之一。 从那时起,这个问题已经多次发生了变化,所以我现在的答案可能看起来非常愚蠢和不合适。 希望故事的总体思路对一些人来说仍然很有趣。
在解释困难的概念时,我是比喻和比喻的忠实粉丝,所以让我试试一个故事。
很久以前:
有一位公主......
function princess() {
她生活在一个充满冒险精彩的世界。 她遇见了她的白马王子,骑着独角兽骑着她的世界,与龙战斗,遇到说话的动物,以及其他许多梦幻般的事物。
var adventures = [];
function princeCharming() { /* ... */ }
var unicorn = { /* ... */ },
dragons = [ /* ... */ ],
squirrel = "Hello!";
/* ... */
但她总是不得不回到她沉闷的家务和大人的世界。
return {
她会经常告诉他们她最新的惊人冒险作为公主。
story: function() {
return adventures[adventures.length - 1];
}
};
}
但他们只会看到一个小女孩......
var littleGirl = princess();
...讲述关于魔法和幻想的故事。
littleGirl.story();
即使成年人知道真正的公主,他们也不会相信独角兽或龙,因为他们永远看不到他们。 大人们说,他们只存在于小女孩的想象中。
但我们知道真相; 那个公主里面的小女孩......
......真的是一个里面有一个小女孩的公主。
链接地址: http://www.djcxy.com/p/13.html