Почему мой тест поддержки функций не запускается до появления синтаксической ошибки? - PullRequest
0 голосов
/ 18 марта 2019

Я выполняю тестирование поддержки функций Javascript на своем сайте, но при тестировании на IE11 у меня возникает проблема, которая вызывает синтаксическую ошибку (из-за параметра по умолчанию) перед выполнением моего теста функций.

Мое приложение создает тег сценария для вставки в представление макета. Этот тег сценария создается с использованием конфигурации, которая определяет все зависимости JS. Я гарантировал, что полученный файл JS, доставленный в браузер, будет иметь мою функцию обнаружения в верхней части комбинированного скрипта (сразу после jQuery). Но, похоже, происходит то, что некоторая функция, определенная позже в скрипте, запускается (или анализируется?) Перед выполнением моего выражения обнаружения функции.

Для большей ясности, вот пример того, как выглядит мой скрипт-тег:

<script type="text/javascript" src="/asset/jscript?load=feature-detection,global,login&version=1820523616"></script>

В результате получается файл сценария, который сначала содержит jQuery, затем мой файл feature-detection.js, а затем все остальное. Эта строка в одном из файлов JS после обнаружения функции вызывает синтаксическую ошибку:

processMessages: function(problem, container, useMessage = true) {...}

EDIT:

Чтобы было ясно, я не уверен, почему синтаксическая ошибка возникнет до логики обнаружения функции, даже если обнаружение моей функции происходит намного раньше в коде. Вот как выглядит мой комбинированный скрипт:

/* jQuery v3.2.0 ... */
// This is a placeholder for jQuery code

// Test browser support for 'for...of' statement.
// If this feature is lacking, ES6 support is lacking from the browser
try {
    eval("for (var i of []);");
} catch(ex) {
    // Show 'Unsupported Browser' banner
    alert('GET BETTER BROWSER');
}

// The rest of my JS files, which would contain several non-supported features
processMessages: function(problem, container, useMessage = true) {...}

«Предупреждение» никогда не срабатывает в IE11, вместо этого я получаю «Ожидаемый»), указывающий на функцию параметра по умолчанию

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Javascript сначала компилируется, затем выполняется, это многоступенчатый процесс.

Ваша синтаксическая ошибка будет возникать в цикле компиляции (или интерпретировать время), поэтому вы видите ее до того, как будет выполнено обнаружение вашей функции.

Я не являюсь экспертом по глубоким js, поэтому моя терминология может бытьнеправильно, но в этом и заключается суть вашей проблемы

0 голосов
/ 18 марта 2019

Я почти уверен, что вы не можете использовать значения параметров по умолчанию в JS таким образом, это, вероятно, то, что ломается в IE.

Вместо этого вам придется использовать его по умолчанию так:

processMessages: function(problem, container, useMessage) {
  if (typeof useMessage === 'undefined') useMessage = true;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...