可能是重复问题:
什么是.NET中的“闭包”?
我目前正在学习Lambda表达式,但经常听到“闭包”这个词。能否用非常简单的语言向我解释一下它的含义?
可能是重复问题:
什么是.NET中的“闭包”?
我目前正在学习Lambda表达式,但经常听到“闭包”这个词。能否用非常简单的语言向我解释一下它的含义?
我认为这是一个重复的问题: .NET中的‘闭包’是什么?
实质上,闭包是一段可以在以后执行的代码块,但它保留了它最初创建时所处的环境 - 也就是说,即使方法已经执行完毕,它仍然可以使用该方法的局部变量等。
现在您可以拿着您的汽车去玩了。11点时,您必须去角落店买面包。
孩子玩耍,忘记世界。
闹钟响了,孩子看到:11点钟!哦-使用“去外面”的方法出门去买面包。
我喜欢这个Google Javascript示例(你可以轻松将它改成C#)。虽然它不是五岁的孩子能理解的东西,但我觉得就算是普通的五岁孩子也不知道函数是什么。
/*
* 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();
}
int i = 0;
string result = null;
Action iExaminer = () =>
{
result = i % 2 == 1 ? "Odd" : "Even";
};
i = 1;
iExaminer();
Console.WriteLine(result);
如果一个5岁的孩子正在学习 LINQ,我会用以下这段代码来解释:
string name = null;
IEnumerable<Customer> query = Customers.Where(c => c.Name == name);
name = "Bob";
// query is resolved when enumerated (which is now)
// Where will now call our anonymous method.
foreach(var customer in query)
{
Console.WriteLine(customer.Name);
}
在计算机科学中,闭包是一个具有自由变量的一等函数,这些变量在词法环境中被绑定。
翻译:
闭包将函数周围的变量封装起来,以便该函数可以被传送到其他地方并仍然使用这些变量,例如,假设您被传送到一个远程位置,但仍然可以访问桌子上的咖啡杯。
示例:
function makefunc(x)
{
return function(){return x}
}
当你知道如何做某件事情时,你可以指定一些(或全部)细节并得到一个闭包。
例如,你知道如何买冰淇淋。你知道如果你在任何商店前面该怎么做。但是,如果你想去特定的商店(例如,由于星期天的折扣),你会带着目的去那里买冰淇淋。"在街角的商店买一些冰淇淋"是"买一些冰淇淋"的闭包。实际上,所有这些都是"在某个地方买一些冰淇淋"的闭包:
现在去和你的朋友玩吧,孩子!(我记住不要在孩子面前说这样的话)