Я полностью обсудил это требование и свои исследования в своем блоге: "Может ли выражение функции обойти закрытие?"
Таким образом, когда у вас есть этот код:
o = new C();
function dumpVariables(){
writeDump(var=variables);
}
o.dumpVariables = dumpVariables;
o.dumpVariables();
Тогда writeDump()
будет ссылаться на область действия внутренних переменных CFC. Однако, если вместо объявления используется функциональное выражение:
dumpVariables = function (){
writeDump(var=variables);
};
(Остальная часть кода такая же, только как создается функция dumpVariables()
)
... затем - поскольку функциональные выражения используют замыкание при привязке ссылок на переменные, эта ссылка на variables
в операторе writeDump()
по-прежнему ссылается на область переменных вызывающего кода, даже когда она вызывается из объекта, в который была введена функция.
Это очень упрощенный случай воспроизведения для целей постановки этого вопроса, поэтому условие состоит в том, что функция, внедряемая в объект, должна создаваться с помощью функционального выражения, а другое условие заключается в том, что выражение функции — единственный код, который я могу изменить. Я говорю это, потому что я полностью осведомлен об обходных путях для этого, которые не используют функциональные выражения, или не используют изменения в коде CFC и т.д... это не моя проблема. Проблема, с которой я столкнулся, и я надеюсь, что кто-то может помочь, заключается в том, как можно получить доступ к контексту переменной, когда функция вызывается, а не когда она объявляется< /сильный>.
Спасибо за любое понимание. Я подозреваю, что ответ "не может быть сделано".