К примеру:
var scriptCode = '<script> function faf() { alert(123); }';
document.head.innerHTML = document.head.innerHTML + scriptCode;
При последующей попытке вызвать код функцию faf() пишет что функция не найдена. Как решить эту проблему? Сразу скажу что через внешний src, решение не подойдет.
document.getElementById('x').addEventListener("click", function() {
var tag = document.createElement('script');
var scriptCode = document.createTextNode("function faf() { alert(123); };");
tag.appendChild(scriptCode);
document.head.appendChild(tag);
});
document.getElementById('y').addEventListener("click", function() {
faf();
});
<button id="x">Click to set function</button><br>
<button id="y">Run function</button>
Если у вас уже есть кусок скрипта в строке и вам надо его выполнить - это тот самый момент когда надо вспомнить про существование eval:
var scriptCode = 'function faf() { alert(123); }';
eval(scriptCode);
faf();
Но тут есть тонкость: eval выполняет код в текущей области видимости, и если вы напишите так в некоторой функции - то faf станет локальной функцией, а не глобальной. Если вам нужна глобальная функция - надо либо запустить eval не напрямую:
window.eval('function faf() { alert(123); }');
Либо опубликовать faf в глобальном объекте после выполнения:
eval('function faf() { alert(123); }');
window.faf = faf;
Либо сразу записывать его туда:
eval('window.faf = function() { alert(123); }');
Также можно вспомнить про конструктор Function:
window.faf = new Function('alert(123)');
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники