2015-10-09 3 views
2

У меня есть файл bg.js, содержимое которого является просто IIFE. Я хотел бы загрузить этот файл/вызвать функцию из другой функции в другой файл. Поскольку IIFE является анонимным (это правильно?), Я не могу назвать его по имени. Кажется, мне нужно загрузить весь файл, чтобы он выполнялся немедленно.Звоните IIFE из другого файла Javascript

Я выполнил поиск и нашел много учебников и документов о том, что такое IIFE, но нигде я не видел, как выполнить его из другой области.

Как я могу вызвать/загрузить файл javascript, который является IIFE из другого файла javascript?

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

Что мне нужно сделать, это вызвать IIFE из другой функции в теле, которое выполняется в perPageBindings()

Edit для ясности Есть два варианта я рассматриваю:

  1. Просто переместите тег сценария в тело из подвала; или
  2. не Дайте IIFE имени, чтобы он больше не анонимен, а затем вызвать это имя функцию из других

Если 2 является жизнеспособным вариантом, то я думаю, что я буду создавать новый вопрос о преобразовании и IIFE к названная функция.

+0

Пожалуйста, дайте мне знать, если мне нужно отправить образец кода. –

+2

Вы можете использовать '$ .getScript' для загрузки js-файла по всему миру и его выполнения. –

+7

по определению IIFE немедленно вызывается - нет смысла «вызывать его из другого файла». – Jamiec

ответ

2

Похоже, вы хотите определить эту функцию, где это делает ее многоразовой. Если вы хотите вызвать из нижнего колонтитула, вызов функции повторного использования в IIFE. Таким образом, он немедленно вызывается в нижнем колонтитуле и вызывает вашу функцию, но вы также можете вызвать эту функцию в другом месте.

Пример:

JS:

function setBackground() { 
    // sets background and can be called whenever 
} 

HTML:

<footer> 
    <script> 
     (function() { 
      setBackground(); 
     }()); 
    <script> 
</footer> 
2

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

Я не говорю, что вы должны иметь вашу функцию поместить переменную в глобальную область видимости, хотя это то, что делают многие библиотеки и один из путей, UMD следующими образом, если среда CommonJS или AMD не доступна.

Вы должны изучить Revealing Module Pattern для лучшей перспективы.

Рассмотрим следующий фрагмент кода:

(function(global){ 
    /* 
    * This variable will stay "private" 
    * because it is scoped to the IIF 
    */ 
    var someProp = "Hello World"; 

    /* 
    * This property is effectively exposed 
    * because it is accessible through 
    * myLib.foxtrot below 
    */ 
    var someOtherProp = "Hello to you too"; 

    var myLib = { 
     foo: "bar", 
     fiz: true, 
     buzz: 1, 
     foxtrot: someOtherProp 
    }; 

    /* 
    * myLib is now accessible through the 
    * global that we passed to the IIF below 
    * at the point of calling with "window" 
    */ 
    global.myLib = myLib; 

}(window)); 
Смежные вопросы