Google Analytics использует трюк, который является прекрасным примером того, что может быть сделано только на типизированных языках.Основным объектом является массив, если GA-скрипт не загружен, но если он есть, он меняет поведение.Давайте посмотрим, смогу ли я это объяснить.
Я вытащил этот фрагмент из источника здесь в stackoverflow:
var _gaq = _gaq || [];
_gaq.push(['_setAccount','UA-5620270-1']);
_gaq.push(['_trackPageview']);
Это похоже на массив с некоторыми значениями, помещаемыми в него.Фактически, если _gaq
равно falsy , когда этот код запускается (как это происходит, если никакой другой аналитический JavaScript-код еще не запущен), он представляет собой массив.Затем, когда основной сценарий аналитики (включенный в тег script в любом месте на странице) загружается, он проверяет этот массив и выполняет некоторую задачу на основе содержимого массива.
Итак, если это происходит в обратном порядке(основной сценарий загружается первым, а затем фрагмент выше) основной сценарий устанавливает _gaq
для объекта с помощью push-метода, который делает то, что хочет от Google.Позже, когда приведенный выше код запускается, _gaq.push
не просто добавляет значения в массив;фактически он выполняет произвольный код (и вообще не передает его в массив).
Следовательно, независимо от того, какой скрипт запускается первым, конечный результат будет одинаковым, когда оба будут завершены.