我已经在我的博客上完整地讨论了这个要求和我的调查:“Can a function expression circumvent closure?”
总之,当有人有这段代码时:
o = new C();
function dumpVariables(){
writeDump(var=variables);
}
o.dumpVariables = dumpVariables;
o.dumpVariables();
然后writeDump()
将引用CFC的内部变量范围。但是,如果使用函数表达式而不是声明:
dumpVariables = function (){
writeDump(var=variables);
};
(其余代码相同,只是如何创建dumpVariables()
函数)
... then - 因为函数表达式在绑定变量引用时使用闭包,variables
语句中对writeDump()
的引用仍然引用调用代码的变量范围,即使它是从内部调用的对象函数已经注入。
这是一个非常简化的repro案例,目的是提出这个问题,所以规定是注入对象的函数必须通过函数表达式创建,其他规定是函数表达式是我可以改变的唯一代码。我这样说是因为我完全了解这方面的解决方法,它不使用函数表达式,或者利用对CFC代码的更改等等......这不是我的问题。我遇到的问题是希望有人可以提供帮助,如何能够访问函数调用时的变量上下文,而不是 < /强>
感谢您的任何见解。我怀疑答案是“无法完成”。