问题标签 [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.
c# - 在 C# 的循环中捕获的变量
我遇到了一个关于 C# 的有趣问题。我有如下代码。
我希望它输出 0、2、4、6、8。但是,它实际上输出了 5 个 10。
似乎这是由于所有操作都引用了一个捕获的变量。结果,当它们被调用时,它们都具有相同的输出。
有没有办法绕过这个限制,让每个动作实例都有自己的捕获变量?
javascript - Javascript 反射
有没有办法从内部获取 javascript 对象的所有方法(私有、特权或公共)?这是示例对象:
当前的问题是 中的代码getMethods()
,简化的示例将仅返回公共方法,而不返回私有方法。
编辑:我的测试代码可能(或可能不会)使我希望得到的东西过于复杂。给出以下内容:
myFunction()
有没有办法从内部找出存在哪些变量myFunction()
。伪代码如下所示:
c++ - C++ 中的简单文本菜单
我正在用 C++ 编写一个愚蠢的小应用程序来测试我的一个库。我希望应用程序向用户显示命令列表,允许用户键入命令,然后执行与该命令关联的操作。听起来很简单。在 C# 中,我最终会编写一个命令列表/映射,如下所示:
关于如何在 C++ 中实现这一点的任何建议?我真的不想为每个命令定义单独的类/函数。我可以使用 Boost,但不能使用 TR1。
javascript - Firefox Javascript 事件匿名函数
当用户单击 HTML 表中的单元格时,我试图注册一个匿名函数。下面是一些原始的、纯粹的代码:
注意使用eval
, 因为它位于一个循环中,并且匿名函数每次都不同。
可以说,这在 Firefox 2 中工作得非常好。但是,Firefox 3 会抛出一个“语法错误”,指向“函数”一词之后的括号内。
有人对我如何解决这个问题有任何聪明的想法吗?
为了清楚地说明我正在尝试做什么,这里有一个非常简化的示例:
换句话说,我希望用不同的参数值来触发相同的函数div
。
c# - 访问修改后的闭包 (2)
这是从Access 到 Modified Closure的问题的延伸。我只是想验证以下内容对于生产使用是否足够安全。
每次启动我只运行一次以上。现在它似乎工作正常。正如 Jon 在某些情况下提到的违反直觉的结果。那么我在这里需要注意什么?如果列表不止一次运行可以吗?
javascript - 如何在 JavaScript 匿名函数中声明时使用变量的值?
这是一个非常基本的问题,但是......
我有一些这样的代码
这应该绑定 divid="blah0"
以在单击时将所有图像更改为'blah.jpg'
。同样,单击 divid ="blah1"
应将所有图像更改为'ha.jpg'
.
但是,匿名函数不起作用,因为它将在执行时使用 'i' 的值,即 2。这意味着单击任一 div 将尝试将所有图像设置为 arr[2] - 不存在元素(有趣的是没有在我的机器上抛出 JS 错误,但那是另一个故事......)。
如何在声明时使用“i”的值创建匿名函数?
作为一个更简单的例子:
当我单击“blah0”时,这应该显示“0”,当我单击“blah1”时显示“1”等。
但是,默认情况下,无论我点击哪个“blah”,它都会显示“10”。
design-patterns - 您是否在具有闭包/委托/函数指针的编程语言中使用模板方法模式?
在过去的 8 年里,我一直在 C# 和 Java 之间来回穿梭。
让我印象深刻的一件事是我已经完全停止在 C# 中使用“模板方法”设计模式。实际上,在 C# 中,我已经开始将这种模式视为一种反模式。
http://en.wikipedia.org/wiki/Template_method_pattern
回到 Java,我发现这种模式是活生生的。我仍然认为它看起来很古老,但意识到在 java 中没有其他方法可以做到这一点。Java 看起来也很古老;)
既然这无论如何都会出现,为什么它是反模式?
- 很多时候,它会因为“错误的原因”耗尽你的继承层次结构。
- 基类倾向于散布各种不相关的代码。
- 它迫使您锁定设计,通常是在开发过程的早期阶段。(在很多情况下过早锁定)
- 在以后的阶段改变这一点变得越来越难。
因此,对于闭包/委托/函数指针,您通常会传递一些函数而不是子类化。
那么回到问题:
如果您的语言有闭包/委托/函数,您是否使用模板方法,何时使用?
python - 对嵌套函数运行单元测试
我来自 Java 世界,您可以在其中隐藏变量和函数,然后使用反射对它们运行单元测试。我使用嵌套函数来隐藏我的类的实现细节,这样只有公共 API 是可见的。我正在尝试针对这些嵌套函数编写单元测试,以确保在开发时不会破坏它们。我曾尝试调用其中一个嵌套函数,例如:
这导致错误消息:
AttributeError:'function'对象没有属性'inner'
我有没有办法针对这些嵌套函数编写单元测试?如果没有,有没有办法像类变量一样通过在它们前面加上__来触发函数名称的名称转换?
javascript - var self = 这个?
使用实例方法作为事件处理程序的回调将范围this
从"My instance"更改为"Whatever just called the callback"。所以我的代码看起来像这样
它有效,但这是最好的方法吗?我觉得很奇怪。
javascript - Javascript 循环中的事件处理程序 - 需要闭包吗?
我正在处理一些我从别人那里接手的 html 和 Javascript 代码。该页面每十秒重新加载一个数据表(通过异步请求),然后使用一些 DOM 代码重新构建该表。有问题的代码如下所示:
然而,当onchange
为一个元素触发事件<select>
时,似乎相同的值被传递给表中onStatusChanged()
每个的方法<select>
(我已经验证了在循环的每次迭代中,callid
并被anotherid
赋予了新的、不同的值)。
我怀疑这是因为我使用select.onchange = function()
语法设置事件处理程序的性质。如果我理解它是如何正常工作的,那么这个语法将 onchange 事件的闭包设置为一个引用这两个引用的函数,它们最终具有在循环的最后一次迭代中设置的任何值的最终值。callid
当事件触发时,和引用的anotherid
值是在最后一次迭代中设置的值,而不是在单个迭代中设置的值。
有没有办法可以复制我传递给的参数的值onStatusChanged()
?
我更改了标题以更好地反映问题和接受的答案。