问题标签 [closures]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
12 回答
44397 浏览

.net - .NET 中的“闭包”是什么?

什么是闭包?我们在 .NET 中有它们吗?

如果它们确实存在于 .NET 中,您能否提供一个代码片段(最好是 C#)来解释它?

0 投票
3 回答
2274 浏览

closures - 闭包和上下文无关语法

我正在查看我的理论计算机科学课程的教学大纲,并在上下文无关语法的标题中列出了“闭包属性”。我翻阅了关于这个主题的教科书,发现很少。目前它所拥有的东西有点超出我的想象(我还没有上过这门课程),但我了解一点。

我想知道上下文无关语法中的闭包概念是否与函数式编程中的闭包概念相同或相关。据我所知,它谈到了结合语法和解决重叠问题。书中的部分有很多部分我还不明白,所以我不确定这些想法是否相同。

(更多背景信息:我正在给教授写一封电子邮件,询问是否可以将课程从 Perl 切换到 Ruby 或 Python。如果这些概念相关,那可能是我们应该使用 Ruby 而不是 Perl 的另一个原因。)

0 投票
4 回答
1799 浏览

ruby - 在 ruby​​ 中将函数作为参数传递

我正在尝试用 ruby​​ 进行函数式编程,但那里似乎没有太多好的文档。

本质上,我正在尝试编写一个具有 Haskell 类型签名的组合函数:

所以

等等

我发现了一些关于使用 zip 和 map 的东西,但感觉真的很难用。

实现这样的事情的最“红宝石”方式是什么?

0 投票
3 回答
1435 浏览

java - java和javascript回调比较

看来我并不像我想象的那样理解 javascript 回调。

在以下示例中,我认为 setTimeout 中的每个函数副本都将引用其自己的变量“index”副本。因此,运行该示例应产生以下警报:“零”“一”“二”。

但是,似乎索引变量只有一个副本,并且回调函数的所有副本都指向同一个变量,给我以下警报:“两个”“两个”“两个”。

java中的以下类似(我认为)示例按预期打印“零”“一”“二”。

谁能向我解释为什么 js 示例不起作用,或许可以比较两个示例中发生的情况?

0 投票
4 回答
215 浏览

javascript - 是什么导致此代码不起作用?

我试图理解为什么这不起作用。(尚未验证的基本示例)

当我测试它时,萤火虫状态 Product.addPage 没有找到。

0 投票
1 回答
1997 浏览

javascript - 使用 jQuery 的 each() 在 JavaScript 中更干净(嵌套)的闭包

我想知道是否有一种更简洁(更简洁)的方式来执行each()以下 JavaScript 代码中的操作。

请注意,最后一次调用对 dom 元素重新排序,因此.moreinfodialog类不再位于 href 旁边。

顺便说一句:这个源使用 jquery/jquery-ui 对话框来隐藏带有.moreinfodialog类的 div 中的任何文本,并将其替换为Click for more info.文本。单击该文本时,将显示一个对话框,其中包含原始 div 内的文本。

0 投票
9 回答
25430 浏览

python - 如何创建 lambda 列表(在列表理解/for 循环中)?

我想从 Python 中的常量列表创建一个 lambda 对象列表;例如:

但是,当我运行它们时,这将创建一个 lambda 对象列表:

我希望它会打印

相反,它打印:

似乎所有 lambdas 都被赋予了错误的参数。我做错了什么,有没有办法解决它?我认为我在 Python 2.4 中。

编辑:多一点尝试的东西等等想出了这个:

打印从 1 到 25 的期望方格,然后使用前面的 print 语句:

仍然给我所有25的s。这两个打印调用之间现有的 lambda 对象是如何变化的?

相关问题:为什么 map() 和列表理解的结果不同?

0 投票
3 回答
254 浏览

javascript - 根据它们的构造方式,回调也可以定义为闭包吗?

在 JavaScript 中,我知道闭包可以定义为嵌套函数,该函数可以访问其包含函数的变量。例如:

onreadystatechange现在,下面的代码正在为请求对象的属性建立一个回调;但是,我想知道根据定义,这是否也被认为是一个闭包

我意识到该handleResponse函数也可以在 的上下文中编写为匿名函数submitHandler,但我发现如果在函数回调范围之外定义回调,更复杂的 Ajax 代码可以更易读和更容易维护。同样,这是一个人为的例子,我正在使用它来简单地展示我的问题的重点。

0 投票
6 回答
855 浏览

c# - 是否有充分的理由说明闭包在 C# 中不是不可变的?

我一直在脑海中一遍又一遍地思考这个问题,我似乎无法想出一个很好的理由来解释为什么 C# 闭包是可变的。如果您不知道到底发生了什么,这似乎是一种获得一些意想不到的后果的好方法。

也许有更多知识的人可以解释为什么 C# 的设计者会允许状态在闭包中改变?

例子:

这将为第一次调用打印“hello”,但在第二次调用时外部状态会发生变化,打印“goodbye”。闭包的状态已更新以反映对局部变量的更改。

0 投票
2 回答
427 浏览

python - 使绑定方法像函数一样工作的最 Pythonic 方式是什么?

我正在使用一个 Python API,它希望我向它传递一个函数。但是,由于各种原因,我想向它传递一个方法,因为我希望函数根据它所属的实例表现出不同的行为。如果我向它传递一个方法,API 将不会使用正确的“self”参数调用它,所以我想知道如何将一个方法变成一个知道它属于什么“self”的函数。

我可以想到几种方法来做到这一点,包括使用 lambda 和闭包。我在下面包含了一些示例,但我想知道是否有标准机制可以实现相同的效果。