考虑以下JavaScript代码:
function getFunction(x) {
var closureMember = x;
return function() {
return closureMember * 2;
};
}
var f = getFunction(5);
在这里,对
getFunction
的调用将创建一个包含成员closureMember
的闭包,返回引用此闭包的匿名函数,并将其分配给变量f
。如果我调用匿名函数,它将执行其代码,并且实际上将访问闭包中的成员closureMember
。JavaScript使我可以在匿名函数上调用
toString
方法,该函数返回其代码的文本表示形式。在这种情况下,表示形式将包含closureMember
的名称,但不授予对实际变量的任何访问权限(请注意,如果多次调用getFunction
,则它可以存在于多个实例中)。题:
JavaScript是否提供任何反射功能,这些功能将允许在运行时分析/修改与函数实例关联的闭包的结构和内容?
最佳答案
我不确定这正是您想要的,但是下一个代码可以正常工作。
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();