меняя струну к функции в JavaScript (не оценка)

var foo = "function (){ alert('meee'); }";
foo();

Я попробовал вышеупомянутое, но оно не работает, там какой-либо другой способ выполнить ту функцию, не используя оценку?

спасибо

9
задан Val 26 July 2010 в 19:45
поделиться

3 ответа

вы хотите использовать конструктор Function напрямую, как сказал Андерс. Все аргументы являются строками. Последний аргумент - тело функции, все ведущие аргументы - имена аргументов, которые принимает функция.

Заимствуя пример Андерса,

var multiply = new Function("x", "y", "return x * y");

можно написать

var multiply = function (x,y) {
  return x * y
}

В вашем случае, у вас есть "function (){ alert('meee'); }" и вы хотите сохранить ее как функцию var foo.

var fn = "function (){ alert('meee'); }";
var foo = new Function("return ("+fn+")")();
foo();
// alerts "meee"

Разница между Function и eval в том, что eval работает в частной области видимости, а Function - в глобальной.

var x="haha", y="hehe";

function test () {
  var x=15, y=34;
  eval("alert('eval: ' + x + ', ' + y)");
  new Function("alert('Func: ' + x + ', ' + y)")();
} 

test();

// eval: 15, 34
// Func: haha, hehe

Не пытайтесь запустить его в консоли, вы получите обманчивый результат (в консолях используется eval). Записав его в тег