2017-01-25 7 views
0

Я анализирую код на веб-сайте, и наткнулся на следующую анонимную функцию, за которой следует инструкция try catch. Мне просто интересно, что делает попытка catch catch в конце. Предварительно загружает URL-адрес, чтобы он загружался быстрее, чем анонимная функция? Кроме того, смысл в том, что он не поймает никаких ошибок.Javascript try catch statement

(function() { 
     var fired = false; 
     bsnPop.add("http://www.someurl.com", { 
      under: !noPopunder, 
      newTab: false, 
      forceUnder: true, 
      shouldFire: function() { 
       return !fired; 
      }, 
      cookieExpires: -1, 
      afterOpen: function(url) { 
       createCookie(); 
       fired = true; 
       doSecondPop(); 
      } 
     }); 
    })(); 
    try { 
     var hint = document.createElement("link"); 
     hint.rel = "dns-prefetch"; 
     hint.href = "http://www.someurl.com"; 
     document.head.appendChild(hint); 
     var hint = document.createElement("link"); 
     hint.rel = "preconnect"; 
     hint.href = "http://www.someurl.com"; 
     document.head.appendChild(hint); 
    } catch (e) {} 
+0

Довольно бесполезно ... – Eric

+1

Ваше название предполагает, что вы задаете вопрос о функции 'try' /' catch' JavaScript, но это не так; вопрос спрашивает, что делает ** код * внутри * 'try' **. Это совершенно не связано с 'try' /' catch'. Отдельно: * «В чем дело, это не ловушка каких-либо ошибок». * Да, он ловит все ошибки. Затем он полностью игнорирует их. –

+0

Эффект только для подавления ошибок консоли –

ответ

3

Со ссылкой на link types список MDN, "DNS-упреждающий" и "preconnect" перечислен как экспериментальные. Они не отображаются в списке значений «rel» для типов ссылок элементов ссылок в HTML5

Таким образом, код использует экспериментальную технологию в Интернете, которая может вызвать ошибку в некоторых браузерах. Чтобы предотвратить остановку приложения и регистрацию исключения на консоли, код помещается в блок try с блоком catch, который игнорирует ошибку.


в ответ на вопрос подробности, анонимная функция в IIFE вызывается и передает объект, содержащий параметры и обратные вызовы в вызове bsnPop.add. На этом этапе не создается всплывающее окно.

Следующий код в блоке try пытается ускорить доступ к веб-сайту, запросив DNS-поиск имени веб-сайта заранее и открыть соединение с сайтом, прежде чем пытаться получить контент.

Код размещен в блоке try, чтобы исключить возможность броузера браузера, если запрошенные операции не поддерживаются. Приложение не считает отсутствие поддержки ошибкой и хочет продолжать в любом случае.

Конечный результат: если поддерживаются dns-prefetch или preconnect, браузер может воспользоваться подсказкой и выполнить операции. Если они не поддерживаются, любая сгенерированная ошибка игнорируется, а код продолжается в следующем утверждении - подключение к веб-сайту позже должно продолжаться с нормальной скоростью.

+0

Спасибо за ответ. Таким образом, анонимные функции срабатывают, а также срабатывает попытка catch? Я не понимаю смысла, если обе по сути делают то же самое. В чем смысл? –

+0

@EliseCrane, я обновил ответ в ответ на ваш комментарий. – traktor53

+0

@ Tracktor53 спасибо! Очень признателен. –