Tag: closures

(lambda)函数closures捕获什么?

最近我开始玩Python,并且在closures工作的时候遇到了一些奇怪的事情。 考虑下面的代码: adders=[0,1,2,3] for i in [0,1,2,3]: adders[i]=lambda a: i+a print adders[1](3) 它构build了一个简单的函数数组,它接受一个单一的input并返回一个数字所添加的input。 这个函数是在for循环里构造的,迭代器从0到3运行。 对于这些数字中的每一个,都会创build一个lambda函数来捕获i并将其添加到函数的input中。 最后一行以3作为参数调用第二个lambda函数。 令我惊讶的是,输出是6 。 我预计4 。 我的推理是:在Python中,一切都是一个对象,因此每个variables都是必不可less的指针。 当为i创buildlambdaclosures时,我期望它存储一个指向i当前指向的整数对象。 这意味着当i分配一个新的整数对象时,它不应该影响以前创build的闭包。 可悲的是,在debugging器中检查adders数组显示它。 所有的lambda函数都指向i的最后一个值3 ,这导致adders[1](3)返回6 。 这使我想知道以下几点: 什么closures准确捕获? 说服lambda函数捕捉i的当前值的最优雅的方式是什么,当i改变它的值时不会受到影响?

在javascript中执行自动函数的目的是什么?

在JavaScript中,你什么时候想要使用这个: (function(){ //Bunch of code… })(); 在此: //Bunch of code…

Python嵌套函数中的局部variables

好吧,对此我忍无可忍,我知道这样看起来会非常复杂,但请帮我理解发生了什么。 from functools import partial class Cage(object): def __init__(self, animal): self.animal = animal def gotimes(do_the_petting): do_the_petting() def get_petters(): for animal in ['cow', 'dog', 'cat']: cage = Cage(animal) def pet_function(): print "Mary pets the " + cage.animal + "." yield (animal, partial(gotimes, pet_function)) funs = list(get_petters()) for name, f in funs: print name + ":", f() […]

捕获的variables在C#中循环

我遇到了一个关于C#的有趣的问题。 我有像下面的代码。 List<Func<int>> actions = new List<Func<int>>(); int variable = 0; while (variable < 5) { actions.Add(() => variable * 2); ++ variable; } foreach (var act in actions) { Console.WriteLine(act.Invoke()); } 我期望它输出0,2,4,6,8。然而,它实际上输出了5个10。 这似乎是由于所有的行动都指向一个被捕获的variables。 因此,当它们被调用时,它们都具有相同的输出。 有没有办法绕过这个限制让每个动作实例都有自己的捕获variables?

Javascript臭名昭着的循环问题?

我有下面的代码片段。 function addLinks () { for (var i=0, link; i<5; i++) { link = document.createElement("a"); link.innerHTML = "Link " + i; link.onclick = function () { alert(i); }; document.body.appendChild(link); } } 上面的代码用于生成5个链接,并使用警报事件绑定每个链接以显示当前链接ID。 但它不起作用。 当你点击生成的链接时,他们都会说“链接5”。 但下面的代码片段符合我们的预期。 function addLinks () { for (var i=0, link; i<5; i++) { link = document.createElement("a"); link.innerHTML = "Link " + i; […]

JavaScriptclosures如何工作?

你如何解释JavaScript闭包给了解它们所包含的概念(例如函数,variables之类)的人,但是自己并不理解闭包? 我已经看到维基百科给出的Scheme示例 ,但不幸的是它没有帮助。

循环中的JavaScript闭包 – 一个简单实用的例子

var funcs = []; for (var i = 0; i < 3; i++) { // let's create 3 functions funcs[i] = function() { // and store them in funcs console.log("My value: " + i); // each should log its value. }; } for (var j = 0; j < 3; j++) { funcs[j](); // and […]