Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция eval() (https://javascript.ru/forum/misc/13572-funkciya-eval.html)

KBEPT 04.12.2010 18:06

Функция 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. Кроссбраузерность потом :) Спасибо.

B@rmaley.e><e 04.12.2010 18:17

А Вы не пробовали сначала почитать немного о синтаксисе JS?
func_1 = function() { alert('in'); } alert('out');

monolithed 04.12.2010 18:19

Цитата:

Сообщение от 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')");

KBEPT 04.12.2010 18:49

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


Часовой пояс GMT +3, время: 10:14.