2016-07-04 7 views
1

В приведенном ниже коде приведена ошибка, на некоторой версии в браузере firefox - linksHandle is not defined.Закрытие и функция подъема - не работает на firefox

Код состоит из функции, которая внизу имеет функцию с именем linksHandle. Насколько я знаю, эта функция должна быть поднята, когда функция, в которой она определена, вызывается.

Поэтому функция, определенная для события «mMenuReady», должна иметь к ней доступ, поскольку она включает все функции и переменные, которые были определены в контексте выполнения.

Почему некоторые версии firefox нуждаются в объявлении функции (linksHandle), который должен быть определен ранее, чтобы обратный вызов «mmenu» включал эту функцию?

document.addEventListener('readystatechange', function() { 
    if (document.readyState === 'interactive') { 

     if (typeof jQuery === 'function') { 
      // callback function that is invoked later by the event that is triggered -> $(window).trigger("mMenuReady") 
      $(window).on('mMenuReady', function() { 
       var links2 = Array.prototype.slice.call(document.querySelectorAll('#mm-mainMenu a')); 
       links2.forEach(linksHandle); 
      }); 
     } 

     function linksHandle(elem) { 
      // function code 
     } 
    } 
}); 

ответ

1

Function declarations inside blocks допускается только с ES6. Они поднимают внутри вашего тела if (не до целой функции), но не в более старых версиях FF, которые реализовали их как "function statements", которые не были подняты (и фактически completely invalid in strict mode), имеющими caused issues like yours.

+0

, если код не был внутри блока if, и сразу же был декалирован в функции. была ли внутренняя функция поднята в ES6? Мой вопрос: утверждение if влияет на подъем функции? – user3021621

+0

Да, объявления функций на уровне функций поднимаются на область функционального уровня. – Bergi

+0

, но в более продвинутых ES, функция поднимается и в if-блоках? – user3021621

 Смежные вопросы

  • Нет связанных вопросов^_^