从闭包中获取数据
Getting data back out of closures
是否有一种方法来提取由函数关闭的变量?
在(类似javascript的)R语言中值是可以通过查找函数的作用域来访问Closed-over直接。例如,常量组合子接受一个值并返回一个总是产生所述值的函数。
K = function (self) {
function () {
self
}
}
TenFunction = K(10)
TenFunction()
10
在R中,绑定到"self"的值可以直接查找。
environment(TenFunction)[[ "self" ]]
10
在R中,这是一个完全正常和可以接受的事情。是JavaScript中有类似的机制吗?
我的动机是我正在使用的函数,我使用一个名为"self"的封闭值创建。我希望能够将数据从函数中提取出来。一个松散的模拟示例与我的问题相关的是。
var Velocity = function (self) {
return function (time) {
return self.vx0 + self.ax * time
}
}
var f = Velocity({vx0: 10, ax: 100})
我真的很想提取self的值。Vx0和self。尽管他们是斧头难以通过其他方式恢复。是否存在一个函数"someFun"来完成此操作?
someFun(f).self
{vx0: 10, ax: 100}
任何帮助或见解将不胜感激。如果有任何需要澄清的地方,请在下面留言,我会编辑我的问题。
不是你说的那样。函数对象支持的反射方法非常少,其中大多数都已弃用或过时。这样做有一个很好的理由:虽然闭包是一种常见的实现词法作用域函数的方式,但它们并不是唯一的方式,而且在某些情况下,它们可能不是最快的。Javascript可能会避免暴露这些细节,以允许实现更灵活地提高性能。
也就是说,你可以用不同的方法来解决这个问题。一种方法是向内部函数添加一个参数,告诉它应该返回某个变量的值,而不是像通常那样做。或者,您可以将变量存储在函数旁边。
关于另一种实现技术的例子,请查阅"lambda提升"。有些实现可能在不同的情况下使用不同的方法。
编辑
不允许这种反射的一个更好的理由是,它相当严重地破坏了函数的抽象,并且这样做暴露了函数如何产生的可怕细节。如果你想要那种访问,你需要的是对象,而不是函数。
- 使用jquery将mysql数据获取到新的表行中
- 使用createContainer将Meteor数据获取到React Native中时出现问题
- 创建按钮,根据表单字段中的数据获取特定的URL
- 将JSON API数据获取到html
- 将json数据获取到数组中
- 如何将具有多个标签的多个的所有数据获取到一个数组中
- 将状态的 URL 数据获取到模板中
- 如何在jquery中将xml解析数据获取为全局变量
- 在没有JQuery的情况下将JSON数据获取到TVML项目中
- Angular js如何将索引数据获取到另一个模板中
- 如何将PHP Post数据获取到jquery ajax请求中
- 使用javascript中.data()中存储的数据获取变量
- 无法将动态数据获取到 Jquery 饼图中
- 将节点.js neDB 数据获取到变量中
- 更新页面 JSON 数据获取下拉更改
- 将数据绑定到 kendo 下拉列表时,如何将 ajax 响应数据获取到变量
- 画布图像数据获取的值不超过 102,000 个
- 如何通过 JQuery JSON 数据获取 CheckBox(@Html.CheckBox) 的值
- 从html到jquery再到php,再从php到jquery到html,将数据传递到php文件并将数据获取到php文件中
- 如何将Jquery.get中的数据获取到Javascript中的一个变量中