Как вызвать eval в контексте другой функции для доступа к ее локальным переменным?
Как вызвать eval в контексте другой функции для доступа к ее локальным переменным?
Это нужно для передачи имен переменных в debug-функцию. Но проблема в том, что в функции куда эти имена передаются эти переменные не определены - поэтому eval возвращает ошибку (исключение). function debugFunc(name){ try{ alert( 'debug: ' + name + "=" + eval(name) ); }catch(err){alert('debug: ' + err);} } function someFunc() { var ABCD = 10; debugFunc( "ABCD" ); alert( 'internal: ABCD='+ eval( "ABCD" ) ); } someFunc(); |
О боже:)
Что ты пытаешься сделать? |
Почемучкин,
Eval выполняется в глобальной области видимости. В принципе использовать eval - плохая практика, лучше объясни что ты пытаешься сделать. |
Hoshinokoe,
Тоже самое что и я написал, только у меня это поместилось в два слова: "О боже" :) Точнее дело даже не в eval, просто не понимаю зачем это! UPD: В общем можешь так: function debugFunc(name){ try{ alert( 'debug: ' + name + "=" + eval(name) ); }catch(err){alert('debug: ' + err);} } function someFunc() { this.ABCD = 10; debugFunc("ABCD"); alert( 'internal: ABCD='+ eval( "ABCD" ) ); } someFunc(); Но лучше объясни зачем это тебе. |
что то подобное
http://javascript.ru/forum/jquery/30...remennykh.html |
Правда зачем это, не понятно.
Всегда можно передать переменную как минимум в качестве параметра, я не пойму что автор топика хочет дебажить таким способом... |
Цитата:
|
Эта функция выводит список переменных и их значений - нужно для дебаггинга букмарклетов, чтобы не писать многоэтажные alert("ABCD="+ABCD+"\nEFGH="+EFGH+"\n ...)
Но вообще-то еще и просто интересно. Skipp, в твоем примере this.ABCD - это то же, что window.ABCD, поэтому переменная просто объявляется как глобальная переменная (это же можно сделать просто убрав var в объявлении) - не подходит там, где нужны только локальные переменные. И именно в этом загвоздка. |
vadim5june,
Спасибо за ссылку - там действительно рабочее решение, но к сожалению создается "индивидуальная" функция, которая имеет доступ к переменным текущей. Это работает, но придется каждый раз вместо простого вызова функции debugFunc(name) проделывать такое: txt = debugFunc.toString(); eval(txt); debugFunc(name); Оно конечно работает, но хотелось бы одним вызовом передавать контекст. |
Часовой пояс GMT +3, время: 09:31. |