Questions tagged «closures»

闭包是一类函数,它引用(封闭)其定义范围内的变量。如果闭包在其定义范围结束后仍然存在,则关闭的变量也将继续存在。

30
JavaScript闭包如何工作?
这个问题的答案是社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 Наэтотвопросестьответына 堆栈溢出нарусском:Какработаютзамыканияв的JavaScript 您将如何向了解了闭包本身的概念(例如函数,变量等)的人解释JavaScript闭包,但却不了解闭包本身? 我已经在Wikipedia上看到了Scheme示例,但是不幸的是它没有帮助。

30
循环内的JavaScript闭合–简单的实际示例
Наэтотвопросестьответына 堆栈溢出нарусском:Почемуасинхроннаяфункциявнутрициклавыполняетпоследнююитерацию многораз ? var funcs = []; // let's create 3 functions for (var i = 0; i < 3; i++) { // and store them in funcs funcs[i] = function() { // each should log its value. console.log("My value: " + i); }; } for (var j = …

26
为什么Python Lambda有用?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我正在尝试找出Python lambda。lambda是在现实生活中应该被遗忘的那些“有趣”语言项目之一吗? 我确定在某些情况下可能需要使用它,但是鉴于它的晦涩之处,在将来的版本中重新定义了它的潜力(根据各种定义我的假设)以及降低的编码清晰度-是否应该被避免? 这让我想起了C类型的溢出(缓冲区溢出)-指向顶部变量,并通过重载来设置其他字段值。感觉像是技术娴熟的演艺风格,但却是维护编码员的噩梦。



12
JavaScript闭包与匿名函数
我的一个朋友和我目前正在讨论什么是JS中的闭包,什么不是。我们只想确保我们正确理解它。 让我们来看这个例子。我们有一个计数循环,并希望延迟在控制台上打印计数器变量。因此,我们使用setTimeout和闭包捕获计数器变量的值,以确保其不会打印N倍于值N的值。 没有闭包或接近闭包的错误解决方案是: for(var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); }, 1000); } 当然,它将i在循环后打印10倍的值,即10。 因此,他的尝试是: for(var i = 0; i < 10; i++) { (function(){ var i2 = i; setTimeout(function(){ console.log(i2); }, 1000) })(); } 按预期打印0到9。 我告诉他,他并没有使用闭包捕获i,但他坚持认为自己是。我通过将for循环体放在另一个循环中(将他的匿名函数传递给),再次打印10次10 证明了他没有使用闭包。如果我将他的函数存储在a中并在循环后执行它,也打印10次10​​,则同样适用。所以我的观点是他并没有真正捕获的值,因此他的版本不是闭包的。setTimeoutsetTimeoutvari 我的尝试是: for(var i = 0; i < …


6
在PHP中,什么是闭包?为什么要使用“ use”标识符?
我正在检查一些PHP 5.3.0功能,并在网站上运行了一些看起来很有趣的代码: public function getTotal($tax) { $total = 0.00; $callback = /* This line here: */ function ($quantity, $product) use ($tax, &$total) { $pricePerItem = constant(__CLASS__ . "::PRICE_" . strtoupper($product)); $total += ($pricePerItem * $quantity) * ($tax + 1.0); }; array_walk($this->products, $callback); return round($total, 2); } 作为匿名函数的例子之一。 有人知道吗?有文件吗?而且看起来很邪恶,应该使用它吗?
407 php  closures 

10
JavaScript惯用语的基础是什么:var self = this?
我在WebKit HTML 5 SQL Storage Notes Demo的源代码中看到了以下内容: function Note() { var self = this; var note = document.createElement('div'); note.className = 'note'; note.addEventListener('mousedown', function(e) { return self.onMouseDown(e) }, false); note.addEventListener('click', function() { return self.onNoteClick() }, false); this.note = note; // ... } 笔者采用自我在一些地方(函数体)及本在其他地方(的函数方法的参数列表中定义的机构)。这是怎么回事?既然我已经注意到它了,我是否会开始到处看到它?


3
访问修改后的闭包
string [] files = new string[2]; files[0] = "ThinkFarAhead.Example.Settings.Configuration_Local.xml"; files[1] = "ThinkFarAhead.Example.Settings.Configuration_Global.xml"; //Resharper complains this is an "access to modified closure" for (int i = 0; i < files.Length; i++ ) { // Resharper disable AccessToModifiedClosure if(Array.Exists(Assembly.GetExecutingAssembly().GetManifestResourceNames(), delegate(string name) { return name.Equals(files[i]); })) return Assembly.GetExecutingAssembly().GetManifestResourceStream(files[i]); // ReSharper restore AccessToModifiedClosure } …
316 c#  resharper  closures 


22
JavaScript闭包的实际用途是什么?
我在努力围绕JavaScript闭包。 通过返回内部函数,我可以访问其直接父级中定义的任何变量。 这对我有什么用?也许我还没有完全明白这一点。我在网上看到的大多数示例没有提供任何真实的代码,只是模糊的示例。 有人可以告诉我现实世界中使用闭包吗? 例如,这是吗? var warnUser = function (msg) { var calledCount = 0; return function() { calledCount++; alert(msg + '\nYou have been warned ' + calledCount + ' times.'); }; }; var warnForTamper = warnUser('You can not tamper with our HTML.'); warnForTamper(); warnForTamper();

7
为什么python嵌套函数不称为闭包?
我已经在Python中看到并使用了嵌套函数,它们与闭包的定义匹配。那么为什么叫他们nested functions而不是closures? 嵌套函数不是因为没有被外部世界使用而不是闭包吗? 更新:我正在阅读有关闭包的知识,这让我开始思考关于Python的这个概念。我搜索并找到了某人在下面的评论中提到的文章,但是我无法完全理解该文章中的解释,所以这就是为什么我问这个问题。

6
(lambda)函数闭包捕获了什么?
最近,我开始玩弄Python,并且在闭包的工作方式中遇到了一些奇怪的事情。考虑以下代码: adders=[0,1,2,3] for i in [0,1,2,3]: adders[i]=lambda a: i+a print adders[1](3) 它构建了一个简单的函数数组,这些函数接受单个输入并返回该输入加数字后的结果。这些函数在for循环中构造,其中迭代器i从0到运行3。对于这些数字中的每一个,lambda都会创建一个函数,将其捕获i并将其添加到函数的输入中。最后一行使用参数作为参数调用第二个lambda函数3。令我惊讶的产量6。 我期望一个4。我的推论是:在Python中,一切都是对象,因此每个变量都是指向它的指针。为创建lambda闭包时i,我希望它存储一个指向当前由指向的整数对象的指针i。这意味着,当i分配一个新的整数对象时,它不应影响先前创建的闭包。可悲的是,adders在调试器中检查该阵列是否可以完成。所有的lambda功能指的最后一个值i,3,其结果adders[1](3)返回6。 这让我想知道以下几点: 闭包到底捕获了什么? 用最优雅的方法说服lambda功能捕获当前值,i而该方法在i更改其值时不会受到影响?
249 python  lambda  closures 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.