Вы не можете смешивать объявления функций и выражения функций таким образом.Вы должны сделать полное объявление или выражение внутри eval()
.
eval("function a() { return 1; }");
console.log(a());
Это будет работать, так как мы дадим объявлению функции собственное имя, a
, а затем вызовем функцию, которую она создает в глобальной области.
eval("var a = function() { return 1; }");
console.log( a() );
Это также будет работать, поскольку выражение функции, присваивающее его переменной a
, теперь является частью того, что оценивается.И тогда мы можем вызвать функцию в ее области действия.
Ни один из них не должен использоваться, если есть альтернативы.Наиболее распространенной альтернативой является использование new Function();
.
var a = new Function( 'return 1;' );
console.log( a() );
Это дает тот же конечный результат и немного безопаснее, чем использование eval()
.
Я был бы удивлен, хотя, если бы это был единственный способ, которым фреймворкпозволяет определить дополнительные функции JavaScript.Я предполагаю, что, поскольку это в конфигурации чего-то, проблемы безопасности, которые это дает, менее важны, чем если бы это был открытый код.Но я бы перечитал документы структуры, чтобы дважды проверить, что это единственный вариант.