2017-02-14 5 views
0

Ряд различных статей в Интернете исповедовали величие использования глобального импорта при разработке модулей (аналогично jQuery).Глобальные импортные переменные и IIFEs

Так что, делая что-то вроде этого ...

(function(globalVariable){ 
    globalVariable.printStuff = function(){ 
    console.log(‘Hello World’) 
    }; 
}(globalVariable)); 

... означает, что я могу вызвать функцию с чем-то вроде этого:

globalVariable.printStuff(); 

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

globalVariable undefined 

Мой quesiton есть, где именно мне нужно, чтобы объявить эту переменную так, что я может заставить это работать?

+1

Что с 'globalVariable.printStuff() {/ * что это даже? * /}; '? – Phil

+3

, в то время как это не решение, будьте осторожны с фигурными цитатами «Hello World», вы должны использовать регулярные кавычки '' '. Кроме того, вы на самом деле определяете переменную, называемую «globalVariable», которую вы передаете в ваш IIFE? – haxxxton

+0

Я хочу, чтобы все функции этой функции не загрязняли глобальное пространство имен и не сводили к минимуму конфликты с другими сценариями. Итак, я надеялся, что наличие чего-то типа globalVariable позволит мне настроить таргетинг на эти частные функции. – Modermo

ответ

1

Для такого реального простого модуля, вам не нужны никакие IIFE. Просто напишите литерал объекта:

var globalVariable = { 
    printStuff: function() { 
     console.log('Hello World'); 
    } 
}; 

globalVariable.printStuff(); 

Если вы хотите использовать сферу IIFE, вы должны создать объект где-нибудь. Это может быть внутри модуля или снаружи:

var globalVariable = (function() { 
    var module = {}; 
    var localVariable = 'Hello World'; 
    module.printStuff = function() { 
     console.log(localVariable); 
    }; 
    return module; 
}()); 

globalVariable.printStuff(); 

var globalVariable = {}; 

(function(module) { 
    var localVariable = 'Hello World'; 
    module.printStuff = function() { 
     console.log(localVariable); 
    }; 
}(globalVariable)); 

globalVariable.printStuff(); 
+0

Вот и все! Я пытался объявить globalVariable как «var globalVariable;». Почему это нужно определить как объект? – Modermo

+0

Потому что вы хотите создать на нем свойства ... – Bergi

+0

Конечно :) Теперь имеет смысл. Спасибо за разъяснения. – Modermo

0

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

//Set a variable 'globalVariable' in the window object 
 
window.globalVariable = 10; 
 

 
//Access the global variable 'globalVariable' in IIFE 
 
(function(globalVariable) { 
 
console.log(globalVariable); 
 
})(globalVariable);

+0

Зачем мне это делать? –

+0

Мое намерение состояло в том, чтобы объяснить вам, как глобальные переменные работают в JavaScript с использованием IIFE –