如何向某人解释JavaScript关闭,知道它们所构成的概念(例如功能、变量等),但不了解关闭本身?
我已经在维基百科上看到了图表的例子,但不幸的是,它没有帮助。
如何向某人解释JavaScript关闭,知道它们所构成的概念(例如功能、变量等),但不了解关闭本身?
我已经在维基百科上看到了图表的例子,但不幸的是,它没有帮助。
当前回答
最简单、最短、最容易理解的答案:
关闭是一个代码块,每个行都可以用相同的变量名称引用相同的变量集。
如果“这”意味着与它在其他地方做什么不同,那么你知道它是两个不同的关闭。
其他回答
我确信,爱因斯坦没有直接期望我们选择任何异常的脑震动的东西,并在六岁时与无用的尝试,让这些“疯狂”(甚至更糟糕的是他们)的东西到他们的童年头脑:)如果我六岁,我不会喜欢这样的父母,也不会与这样的无聊的慈善家建立友谊,对不起。
无论如何,对于婴儿,关闭只是一个拥抱,我猜,无论你如何试图解释:)当你拥抱一个朋友的,然后你两种分享你男孩现在有什么东西。
我真的不知道如何向5至6岁的婴儿解释,我也不认为他们会欣赏任何JavaScript代码剪辑,如:
function Baby(){
this.iTrustYou = true;
}
Baby.prototype.hug = function (baby) {
var smiles = 0;
if (baby.iTrustYou) {
return function() {
smiles++;
alert(smiles);
};
}
};
var
arman = new Baby("Arman"),
morgan = new Baby("Morgana");
var hug = arman.hug(morgan);
hug();
hug();
只为儿童:
关闭是拥抱
波格飞了
亲吻是微妙的!:)
一个关闭是内部函数在其外部函数中有变量的访问,这可能是最简单的单线解释,你可以获得关闭。
关闭是一种功能,它可以从它所定义的环境中获取信息。
对于某些人来说,信息是创造时的环境价值;对于其他人来说,信息是创造时的环境变量。
一个关闭可以想象一个特殊的情况的全球变量 - 与一个私人副本创建仅为功能。
或者它可以被认为是一种方法,环境是对象的具体例子,其属性是环境中的变量。
前者(封闭作为环境)类似于后者,环境复制是前者中的每个函数转移的背景变量,例子变量在后者中形成一个背景变量。
因此,关闭是一种呼叫函数的方式,而无需明确地指定背景为参数或作为方法引用中的对象。
var closure = createclosure(varForClosure);
closure(param1); // closure has access to whatever createclosure gave it access to,
// including the parameter storing varForClosure.
vs
var contextvar = varForClosure; // use a struct for storing more than one..
contextclosure(contextvar, param1);
vs
var contextobj = new contextclass(varForClosure);
contextobj->objclosure(param1);
这个过程由两个步骤组成:
此分類上一篇
函数可以相互内置,形成一连锁的LexicalEnvironments,也可以称为范围链。
此分類上一篇
此分類上一篇
正如我们所看到的, this.say 是用户对象中的属性,因此在用户完成后,它仍然活着。
如果你记得,当 this.say 创建时,它(就像每个函数一样)得到一个内部参考 this.say 到当前的 LexicalEnvironment. 因此,当前用户执行的 LexicalEnvironment 保持在记忆中。
内部函数保留对外的LexicalEnvironment的参考,内部函数可以随时从中访问变量,即使外部函数完成,浏览器保留LexicalEnvironment及其所有属性(变量)在记忆中,直到有一个内部函数引用它。
这就是所谓的关闭。
曾经有过一个洞穴
function caveman {
有一个非常特殊的岩石的人,
var rock = "diamond";
你不能自己拿到岩石,因为它是洞穴的私人洞穴,只有洞穴人知道如何找到和拿到岩石。
return {
getRock: function() {
return rock;
}
};
}
幸运的是,他是一个友好的骑士,如果你愿意等待他的回来,他会很高兴得到它为你。
var friend = caveman();
var rock = friend.getRock();
非常聪明的 Caveman。