Aar*_*ken 10 javascript v8 node.js
例如,如果我们假设以下代码:
var f = function() { return 'hello world' };
var x = 10;
var y = 314;
var g = function() {
var buf = [], xx = x;
while (xx--)
buf.append(f() + ' ');
return buf.join('');
}
Run Code Online (Sandbox Code Playgroud)
我能得到实际的"代码"为一串g用g.toString().然而,这并没有(显然)得到f和x关闭的成员g(对不起,如果我没有正确使用这些术语.)
有没有办法查询函数的闭包含什么?理想情况下,我可以得到一个对象:
{ 'f' : f, 'x': x } // note that `y` is not here
Run Code Online (Sandbox Code Playgroud)
如果我必须使用C++进行与V8的特殊交互,那没关系 - 尽管在纯JavaScript中以某种方式这样做是最好的.
我知道这是一个奇怪的问题 - 但我确实有理由想要这个!
编辑:
这种方法不存在。如果您执意要在 JavaScript 中执行此操作,那么最好的选择是编写一个解析器来确定函数关闭哪些变量。
如果你写了这样的方法,请分享:)
原帖:
在您的示例中,闭包g可以访问f和y。x被声明为局部变量,因此x不等于 10。没有特殊的方法可以告诉您函数关闭了哪些变量。
如果g是对象的方法,您可以使用 hasOwnProperty 对象的函数来确定对象可以使用哪些属性。据我所知,这是唯一接近确定函数在 JavaScript 中可以访问哪些变量的方法。
| 归档时间: |
|
| 查看次数: |
1511 次 |
| 最近记录: |