问题标签 [lexical-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.
javascript - 这些块的 JS 范围是如何工作的?
谁能解释为什么以下产生 1,2 而另一个产生 5?他们不应该都产生5吗?
基于阅读了一些关于 JS 闭包的文章,我希望它们都产生 5。似乎无法在任何地方找到一篇文章来解释为什么第一个块会产生其他情况。
谢谢!
javascript - 带有函数的 Javascript 闭包如何工作?
嗨,我一直在探索闭包和 javascript 核心概念,我不明白为什么 console.log(factory[i]) 输出未定义我已经将我的函数推到了那里,对吗?如果我在循环外调用 temp 它说未定义,而如果我在循环内调用它返回有点困惑谁能解释我?这是我的代码
javascript - 从 Axios 访问 VUE JS 的数据
我有一个 Vue JS (Vuetify) 应用程序,它发出一个 ajax 请求,我想用响应填充 div 的内容,但是我在访问实例的数据时遇到了困难。我见过的所有示例都使用它来指向数据对象,但是当我这样做时,我得到了这个错误
Unable to set property 'message' of undefined or null reference
该应用程序非常简单:
主.js:
应用程序.vue
this.order可以通过 Axios 的post方法访问而没有问题,但是处理返回的承诺的匿名函数似乎在访问this.message时遇到了问题,这与我看到的示例相反。
我在这里做的不同是什么?
javascript - 防止 JavaScript 闭包继承作用域
我正在寻找一种奇特的方法来防止闭包继承周围的 scrope。例如:
我只知道两种防止共享范围的方法:
(1) 使用阴影变量:
(2) 把函数体放到别的地方:
我的问题是 - 有谁知道防止闭包在 JS 中继承作用域的第三种方法?花哨的东西很好。
我认为唯一可行的方法是vm.runInThisContext()
在 Node.js 中。
让我们想象一下,假设 JS 有一个 private 关键字,这意味着该变量仅对该函数的范围是私有的,如下所示:
并且 IIFE 不起作用:
javascript - 确定函数在闭包 javascript 中是如何被调用的
最近我在hackerrank中遇到了一个问题,它必须计算乘法运算并且必须返回答案。例如
现在这是函数可能以不同方式调用的问题,例如
我知道我们必须关闭第二个方法,即乘法(4)(5)。我为此编写了代码
现在,如果使用 3 个参数 multiply(4)(5)(6) 调用了它的 multiply 函数会怎样。我如何确定该函数是如何被调用的,以及如何为所有输入编写一个通用解决方案。
任何帮助表示赞赏。谢谢
scheme - 暂时覆盖Scheme let 块中的全局定义函数?
假设我有以下功能:
我想暂时g
用不同 f
的电话。例如,像这样:
我希望上面的代码评估为 7,但事实并非如此。相反,它的计算结果为 6,因为g
调用了.f
let
有没有一种方法可以做到这一点,而无需g
在 内部重新定义,并且无需内联in 中let
定义的整个主体?(在实践中,可能是一个非常庞大、复杂的函数)。g
let
g
dart - 镖。匿名函数的参数从何而来?
在下面的示例中,调用(num i)
时它的价值在makeAddr()
哪里?
lexical-closures - 在内部函数中访问外部函数变量
在这个编解码器中,我希望内部函数打印外部函数的值 a(即 10)。我如何实现这一目标?
python - Python 闭包中有什么,习惯 OCaml 的人有什么注意事项?
这是对有关 functools.partial 必要性的问题的旧答案的一种后续:虽然该答案非常清楚地解释了这种现象及其基本原因,但我仍然有一些不清楚的地方。
回顾一下,下面的 Python 代码
给出03, 13, 23, 33,
,而类似的 OCaml 代码
给00, 11, 22, 33,
.
我知道这与应用于lambda arg: str(arg) + str(clo)
其对应的闭包的不同概念有关fun arg -> (string_of_int arg) ^ (string_of_int clo)
。
在 OCaml 中,闭包在创建闭包时将标识符映射到外部范围内clo
的变量值。clo
在 Python 中,闭包以某种方式包含变量clo
本身,这解释了它受到for
生成器引起的增量的影响。
这个对吗 ?
这是怎么做的?正如我的/构造所证明的那样,该clo
变量在全局范围内不存在。一般来说,我会假设生成器的变量是本地的,因此无法生存。那么,再次,在哪里?这个答案提供了一些见解,但我仍然不完全理解它是如何在生成期间设法引用变量本身的。try
except
clo
__closure__
clo
此外,除了这种奇怪的行为(对于习惯于静态绑定语言的人),还有其他需要注意的警告吗?