4

考虑以下 JavaScript 代码:

function getFunction(x) {
    var closureMember = x;

    return function() {
        return closureMember * 2;
    };
}

var f = getFunction(5);

这里调用getFunction创建一个包含成员的闭包closureMember,返回一个引用此闭包的匿名函数,并将其分配给变量f。如果我调用匿名函数,它的代码将被执行,并且closureMember闭包中的成员将被实际访问。

toStringJavaScript 允许我在匿名函数上调用该方法,该函数返回其代码的文本表示。在这种情况下,表示将包含 的名称,closureMember而不提供对实际变量的任何访问权限(请注意,如果getFunction多次调用,它可以存在于多个实例中)。

问题:
JavaScript 是否提供任何反射功能,允许在运行时分析/修改与函数实例关联的闭包的结构和内容?

4

1 回答 1

0

我不确定这是否正是您想要的,但下一个代码可以正常工作。

function getFunction(x) {
    var closureMember = x;

    return function() {
        return closureMember * 2;
    };
}

function changeClosure(x, closure){ 
    var closureMember = x; 
    return eval("(" + closure.toString() + ")");
}

var f = getFunction(5);
var g = changeClosure(42, f);

g();
于 2013-08-19T20:01:35.490 回答