CFML函数表达式中的规避闭包

时间:2013-11-24 16:51:14

标签: coldfusion coldfusion-10 railo cfml

我已经在我的博客上完整地讨论了这个要求和我的调查:“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代码的更改等等......这不是我的问题。我遇到的问题是希望有人可以提供帮助,如何能够访问函数调用时的变量上下文,而不是 < /强>

感谢您的任何见解。我怀疑答案是“无法完成”。

0 个答案:

没有答案