Экспериментировал с qooxdoo и обнаружил неприятную для себя вещь.
Вот этот код работает для source версии, и не работает для build версии:
Оказалось все просто, при генерации build имена переменных хаотично меняются с целью оптимизации. Первым позывом было найти, как отключить оптимизацию. Потом вроде наступило прояснение, которое привело к такому варианту решения проблемы:
Этот простой трюк позволил работать и build версии, и мне стало казаться, что такой вариант в целом правильнее (насколько может быть правильным использование eval отдельный вопрос).
Вот этот код работает для source версии, и не работает для build версии:
var qqq = 'qqq'; eval('alert(qqq)');Оказалось все просто, при генерации build имена переменных хаотично меняются с целью оптимизации. Первым позывом было найти, как отключить оптимизацию. Потом вроде наступило прояснение, которое привело к такому варианту решения проблемы:
var qqq = 'qqq'; eval('(function (a) { alert(a); })')(qqq);Этот простой трюк позволил работать и build версии, и мне стало казаться, что такой вариант в целом правильнее (насколько может быть правильным использование eval отдельный вопрос).
UPDATE: Оказалось, что я глубоко неправ. Даже когда мой код заработал - это было полдороги. Ведь есть еще IE. Так вот, писать надо как выяснилось вот так:
var f = new Function('a', 'alert(a)');
f('qqq');
А вот тут можно почерпнуть полезную информацию: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function
Комментариев нет:
Отправить комментарий