0
var course_code;

function loadScript(url, callback) {
  var script = document.createElement("script");
  script.setAttribute("type", "text/javascript");
  script.setAttribute("src", url);
  script.onload = function() {
    typeof window[callback] === 'function' ? window[callback]() : console.error("Error: function name is not defined");
  }
  document.head.appendChild(script);
}

Далее когда я делаю вот так, то course_code становится undefined:

course_code = loadScript("url", "function_name");

1 Answers1

1

Тернарный оператор это не просто сокращённая запись if. Он ещё возврщает результат и этот результат может быть присвоен.

var callbackResult = (typeof window[callback] === 'function') ? window[callback]() : null;

Так как script.onload выполняется асинхронно, то ваша функция loadScript завершится до того, как скрип загрузится. Поэтому сразу это значение вы вернуть не можете. Но вы можете пообещать его вернуть. Такое обещание называется Promise.