有没有办法提取一个被函数关闭的变量?
在(类似JavaScript)R语言中 通过查找功能的范围可以访问关闭状态 直。例如,常量组合器获取值并返回 一个始终产生所述值的函数。
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.ax的值 难以通过其他方式恢复。有没有功能" someFun"这样做了吗?
someFun(f).self
{vx0: 10, ax: 100}
任何帮助或见解将不胜感激。如果需要任何澄清,请在下面留下评论,我将编辑我的问题。
答案 0 :(得分:2)
不像你所描述的那样,没有。函数对象支持很少的反射方法,其中大多数已被弃用或过时。这有一个很好的理由:虽然闭包是实现词法范围函数的常用方式,但它们不是唯一的方式,在某些情况下它们可能不是最快的。 Javascript可能避免暴露这些细节,以允许实现更灵活地提高性能。
那就是说,你可以通过各种方式解决这个问题。一种方法是向内部函数添加一个参数,告诉它应该返回某个变量的值而不是通常做的事情。或者,您可以将变量与函数一起存储。
有关替代实现技术的示例,请查找“lambda lifting”。某些实现可能在不同情况下使用不同的方法。
不允许这种反射的一个更好的理由是它破坏了函数抽象而非常可怕,并且这样做暴露了函数生成方式的毛茸茸细节。如果你想要那种访问,你真的想要一个对象,而不是一个函数。