如何向某人解释JavaScript关闭,知道它们所构成的概念(例如功能、变量等),但不了解关闭本身?
我已经在维基百科上看到了图表的例子,但不幸的是,它没有帮助。
如何向某人解释JavaScript关闭,知道它们所构成的概念(例如功能、变量等),但不了解关闭本身?
我已经在维基百科上看到了图表的例子,但不幸的是,它没有帮助。
当前回答
查找描述的解释:如何在场景背后的JavaScript关闭工作。
文章解释了范围对象(或LexicalEnvironments)如何分配并以直观的方式使用。
"use strict";
var foo = 1;
var bar = 2;
function myFunc() {
//-- Define local-to-function variables
var a = 1;
var b = 2;
var foo = 3;
}
//-- And then, call it:
myFunc();
在执行顶级代码时,我们有以下范围对象的安排:
此分類上一篇
当 myFunc() 被召唤时,我们有以下范围链:
此分類上一篇
了解范围对象是如何创建,使用和删除,这是一个关键,有一个大图像,并了解如何在盖子下工作关闭。
请参见上述文章,详细信息。
其他回答
关闭是函数内部的一个函数,它可以访问其“亲属”函数的变量和参数。
例子:
function showPostCard(Sender, Receiver) {
var PostCardMessage = " Happy Spring!!! Love, ";
function PreparePostCard() {
return "Dear " + Receiver + PostCardMessage + Sender;
}
return PreparePostCard();
}
showPostCard("Granny", "Olivia");
关闭是函数被关闭时,函数被定义为名称空间,函数被召唤时是不可变的。
在JavaScript中,它发生时:
定义一个函数在另一个函数内 内部函数在外部函数返回后被召回
// 'name' is resolved in the namespace created for one invocation of bindMessage
// the processor cannot enter this namespace by the time displayMessage is called
function bindMessage(name, div) {
function displayMessage() {
alert('This is ' + name);
}
$(div).click(displayMessage);
}
孩子们永远不会忘记他们与父母分享的秘密,即使父母离开后。
JavaScript 功能的秘密是私人变量
var parent = function() {
var name = "Mary"; // secret
}
正如你可以猜测的那样,因为变量每次函数被召唤,没有人会知道它们,必须有一个秘密的地方,它们被存储在那里,它可以被称为秘密室或管道或地方范围,但这并不重要,我们知道它们在某个地方隐藏在记忆中。
但是,在JavaScript中,这是一个非常特殊的事情,在其他功能内创建的功能,也可以知道父母的本地变量,并保持它们,只要他们活着。
var parent = function() {
var name = "Mary";
var child = function(childName) {
// I can also see that "name" is "Mary"
}
}
因此,只要我们在父母功能,它可以创建一个或多个儿童功能,从秘密位置分享秘密变量。
但可悲的是,如果孩子也是父母功能的私人变量,当父母结束时也会死亡,而秘密也会与他们一起死亡。
所以要活着,孩子必须离开,直到太晚了。
var parent = function() {
var name = "Mary";
var child = function(childName) {
return "My name is " + childName +", child of " + name;
}
return child; // child leaves the parent ->
}
var child = parent(); // < - and here it is outside
所以,如果你叫孩子“爱丽丝”,她会回答。
child("Alice") => "My name is Alice, child of Mary"
这就是所有要说的。
考虑到这个问题是关于简单地解释它,就像一个6岁的,我的答案是:
“当您在JavaScript中宣布函数时,它将永久地访问在该函数声明之前线上可用的所有变量和函数,该函数和它所访问的所有外部变量和函数都是我们称之为关闭的。
一个关闭是许多JavaScript开发人员使用的所有时间,但我们认为它是允许的。
var x = 1;
function myFN() {
alert(x); //1, as opposed to undefined.
}
// Or
function a() {
var x = 1;
function b() {
alert(x); //1, as opposed to undefined.
}
b();
}
那么什么呢?
在其他语言中,在函数返回时,函数中使用的变量会被清除,在上面的函数中,x 会是一个“零指标”,你需要设置一个点击和设置并开始通过参考。
我为什么要关心?
但是,正如其他人也指出的那样,它们可以用来创建虚假的私人变量,直到你需要私人变量,只需像你总是一样使用它们。