eval всегда возвращает ошибку при выполнении функции с оператором return - PullRequest
3 голосов
/ 31 декабря 2011

Этот блок кода всегда возвращает ошибки:

eval('if(!var_a){return 0;}');

Такое утверждение прекрасно работает:

eval('alert(1)');

Оператор JavaScript, такой как eval('return 0'), всегда выдает ошибку, если намерение состоит в том, чтобы заставить скрипт остановить дальнейшее выполнение.

eval просто выдает нежелательные ошибки, когда он запускается в каком-то блоке кода и в нем содержится оператор возврата.

Ответы [ 3 ]

3 голосов
/ 31 декабря 2011

Это потому, что вы используете return вне контекста функции.Оберните ваш код в функцию и возврат работает нормально.Есть несколько способов сделать это. Я предлагаю вам не использовать ни один из них .Вместо этого найдите способ избежать eval.Независимо от этого, вот некоторые решения:

eval('(function() { if(!var_a){return 0;} })()');

или

new Function('if(!var_a){return 0;}')()

2 голосов
/ 31 декабря 2011

Вы можете только return изнутри функции. Вот так:

function foo() {
    if (x) alert("woo");
    else return 0;
    doMoreStuff();
 }

Вы не в функции, поэтому возвращаться нечего. Кроме того, почему вы вообще используете eval

0 голосов
/ 31 декабря 2011

В первом случае вы пытаетесь выполнить выражение с return. Во втором случае вы вызываете функцию, которая возвращает значение. Чтобы сделать то, что вы хотите, вы можете объявить и вызвать анонимную функцию в выражении следующим образом ...

eval('(function(){ if(!var_a){return 0;} })()');

Конечно, если вопрос заключается только в том, как создать вычисляемое выражение, которое включает условие, вы можете использовать «троичный» оператор ...

eval('var_a ? nil : 0');
...