我要说这是一个副本:.NET中的'闭包'是什么?
"从本质上讲,闭包是一个代码块,可以在以后执行,但它维护了它最初创建的环境 - 即它仍然可以使用创建它的方法的局部变量等,即使在该方法已经完成执行."
我要说这是一个副本:.NET中的'闭包'是什么?
"从本质上讲,闭包是一个代码块,可以在以后执行,但它维护了它最初创建的环境 - 即它仍然可以使用创建它的方法的局部变量等,即使在该方法已经完成执行."
你的鞋子在大厅里; 你的夹克在厨房里.外出时穿上它们和你的手套(它们在抽屉里).
现在你可以去玩你的车了.十一点钟,你必须去角落商店买些面包.
孩子们玩.忘记了整个世界.
闹钟响了; 小孩看到了:十一点!哦 - 去外面用"外出"封口买面包.
我喜欢Javascript 的Google示例(您可以轻松地将其转换为C#).这不是一个5岁的孩子会理解但是我怀疑一个平均 5岁的孩子会理解一个功能是什么.
/* * When a function is defined in another function and it * has access to the outer function's context even after * the outer function returns * An important concept to learn in Javascript */ function outerFunction(someNum) { var someString = 'Hai!'; var content = document.getElementById('content'); function innerFunction() { content.innerHTML = someNum + ': ' + someString; content = null; // IE memory leak for DOM reference } innerFunction(); }
下面的回答是原来的措辞,类似于"如何解释对一个5岁的人的封闭".
拿这个盒子; 为自己建造一个漂亮的小型太空船.当你去比利的房子并把你的太空船带到那里; 有了封口,你仍然可以使用你的盒子里的所有碎片,即使盒子留在你的卧室里.
如果你真的需要保持简单,那么闭包是一个带有上下文的函数.无论你在何处调用它,闭包中的函数仍然可以访问它定义时的相同变量.(在Lua中,这些被称为upvalues,我认为这是一个非常具有描述性的术语.)
我在Lua中首先遇到了这个概念,这个定义帮助我理解了这个概念.也许看看Lua:它的简单性和强大功能非常吸引人,当然有助于在其他语言中发展某种观点.它的封闭概念就是一个很好的例子.