Первоначальный вопрос был:
Почему код: новая функция 2+2
; не работает?
Чтобы просто объяснить это, вам нужно посмотреть, какие параметры принимает конструктор JavaScript Function
: Функция MDN
Как видите, желаемыми входными данными являются строки:
const sum = new Function('a', 'b', 'return a + b');
console.log(sum(2, 6));
// expected output: 8
Если вы делаете:
new Function`2+2`;
Вы просто создадите анонимный экземпляр без каких-либо значений для использования или возврата значений. Поэтому на выходе будет anonymous {}
Я думаю, что невозможно использовать вызов функции со строкой шаблона для
расчет, он работает только с одинарными или двойными кавычками
Я могу доказать, что это будет работать - есть разные способы решения этой проблемы:
new Function('return arguments[1]')`${2+2}`; // outputs 4
new Function`return Object.entries(arguments)[0]`(2+2); // outputs ['0',4]
Думаю, теперь вы можете понять, как работать с конструктором Function
и tagged templates
. Важной частью является работа с объектом arguments и доступ к желаемому возвращаемому значению.
старый ответ с eval:
const myFunc = evalStr => console.log(eval(evalStr[0]));
myFunc`2+2`;
Для получения дополнительной информации: