ZdraviiSmisl
@ZdraviiSmisl

Вопрос по коду,строка 1?

Фазе loaded присваивается false,потому что на этой фазе скрипт может быть ещё не загружен?

По заданию:Создайте функцию addScript(src, callback), которая загружает скрипт с данным src, и после его загрузки и выполнения вызывает функцию callback.

Скрипт может быть любым, работа функции не должна зависеть от его содержимого. Ошибки загрузки обрабатывать не нужно.

<!DOCTYPE HTML>
<html>

<head>
  <meta charset="utf-8">
</head>

<body>

  <script>
    function addScript(src, callback) {
      var script = document.createElement('script');
      script.src = src;
      var s = document.getElementsByTagName('script')[0]
      s.parentNode.insertBefore(script, s);

      var loaded = false; //(1)

      function onload() {
        if (loaded) return; // повторный вызов
        loaded = true;
        callback();
      }

      script.onload = onload; // все браузеры, IE с версии 9

      script.onreadystatechange = function() { // IE8-
        if (this.readyState == 'loaded' || this.readyState == 'complete') {
          setTimeout(onload, 0);
        }
      };

    }

    addScript("go.js", function() {
      go();
    });
  </script>

</body>

</html>
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
Robur
@Robur
Знаю больше чем это необходимо
Фазе loaded присваивается false,потому что на этой фазе скрипт может быть ещё не загружен?


loaded это переменная, туда присваивается false чтобы onload в первый раз сработала, потом она поменяет его на true и при повторном вызове уже ничего делать не будет и сразу выйдет по условию.
К загрузке скриптов это все не имеет никакого отношения
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
hzzzzl
@hzzzzl
Фазе loaded присваивается false,потому что на этой фазе скрипт может быть ещё не загружен

так точно,
видимо это сделано для того чтобы callback(); выполнился один раз, иначе "в обычных браузерах" он выполнится в первый раз после script.onload = onload , и второй раз после этого мутного трюка для IE8
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы