Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.12.2010, 18:06
Интересующийся
Отправить личное сообщение для KBEPT Посмотреть профиль Найти все сообщения от KBEPT
 
Регистрация: 06.09.2010
Сообщений: 23

Функция eval()
Здравствуйте.

У меня вопрос следующего характера.

Есть фрагмент javascript-кода:
var code_str = "func_1 = function() { alert('in'); } alert('out'); ";
eval(code_str);

Поскольку, я нигде функцию func_1 не вызываю, то после запуска кода должно выдать alert('out'). Но сообщения не показывается.
Но если разделить функцию func_1 и alert символом перехода на новую строку, то все великолепно работает, то есть:
var code_str = "func_1 = function() { alert('in'); } \n alert('out'); ";
eval(code_str);

Получается, что функция eval() обрабатывает построчно? Или я не правильно понимаю(

Если кто-то может дать ссылку на ресурс, где можно прочитать о всех тонкостях eval() или объяснить, как правильно обрабатывать любого размера javascript-код посредством eval() ?

Заранее спасибо большое.

Забыл уточнить. Пока делаю только для браузера Opera. Кроссбраузерность потом Спасибо.

Последний раз редактировалось KBEPT, 04.12.2010 в 18:14.
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2010, 18:17
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

А Вы не пробовали сначала почитать немного о синтаксисе JS?
func_1 = function() { alert('in'); } alert('out');
Ответить с цитированием
  #3 (permalink)  
Старый 04.12.2010, 18:19
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от KBEPT
Есть фрагмент javascript-кода:
var code_str = "func_1 = function() { alert('in'); } alert('out'); ";
eval(code_str);
В этом примере метод eval() получает строку строковую переменную
Здесь же, вызывает alert(), что вполне логично.
Сообщение от KBEPT
var code_str = "func_1 = function() { alert('in'); } \n alert('out'); ";
eval(code_str);
аналогично будет:
var code_str = "func_1 = function() { alert('in'); }; alert('out'); ";
eval(code_str);

А для того чтобы вызвать первую функцию ее нужно определить, а затем вызвать:
var code_str = "func_1 = function() {alert('in'); }; func_1(); alert('out'); ";
eval(code_str);

Поэтому правильней и проще всего так:
eval("(function(){alert('in')})(); alert('out')");

Последний раз редактировалось monolithed, 04.12.2010 в 18:22.
Ответить с цитированием
  #4 (permalink)  
Старый 04.12.2010, 18:49
Интересующийся
Отправить личное сообщение для KBEPT Посмотреть профиль Найти все сообщения от KBEPT
 
Регистрация: 06.09.2010
Сообщений: 23

Большое Вам спасибо.
Поставил плюсики.
Спасибо парни еще раз
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция которая работает на OnLoad не хочет работать на OnClick libinstyle Элементы интерфейса 6 23.03.2010 01:42
Рекурсивная функция HellBells Общие вопросы Javascript 3 23.11.2009 11:23
Функция меняющая значение input type text. Value не подходит( Sundog Общие вопросы Javascript 1 25.09.2009 15:06
Не работает eval в IE ..::Silence::.. Общие вопросы Javascript 8 25.03.2009 13:16
Roll-up menu Tanya Общие вопросы Javascript 5 29.08.2008 17:28