var foo = "function (){ alert('meee'); }";
foo();
Я попробовал вышеупомянутое, но оно не работает, там какой-либо другой способ выполнить ту функцию, не используя оценку?
спасибо
вы хотите использовать конструктор 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
). Записав его в тег и загрузив его в браузер, вы получите истинный результат.
Согласно MDC . Используйте:
var multiply = new Function("x", "y", "return x * y");
var theAnswer = multiply(7, 6);
я не знаю ... вероятно, есть лучший способ сделать то, что вы пытаетесь сделать, не делая себя уязвимым для атаки с внедрением сценария, которая не включает передачу javascript в качестве строка.