2013-09-23 3 views
1

Сравните эти два кода First:Javascript модуль шаблон против функции

function initializeView() {} 
function init() { 
    initializeView(); 
} 

Второе:

function init() { 
    (function initializeView() {})(); 
} 

Если initializeView() вызывается только внутри Init(), то какой из них лучше? (я думаю, что они сделали ту же работу)

EDIT: Я не думал о глобальном пространстве имен на первом месте, потому что все они находятся внутри класса.

var MyObject = (function() { 
    ... 
    function init() {} 
    ... 
})(); 
+0

Это зависит, если вам это нужно в глобальном масштабе или нет. – Sergio

+0

Как часто они вызываются? Помогает ли что-нибудь, если 'initializeView' является закрытием внутри' init'? – Bergi

+0

Не часто. Я не думаю, что это помогает. Оба они работают, но не знают, что лучше. @Bergi – Bill

ответ

2

Первый загрязняет глобальное пространство имен с ненужной переменной, в то время как второй создает ненужные замыкания и/или создает дополнительный объект функции на каждом вызове init.

Предполагая, что initializeView вызывается только один раз за init() (как предлагает IEFE), было бы лучше просто вставить код.

Если вам это нужно, как функция для вызова несколько раз, я бы рекомендовал

var init = (function() { 
    function initializeView() {} 
    return function init() { 
     … 
     initializeView(); 
     … 
    }; 
}()); 
+0

Закрытие FTW. Кроме того, следует отметить, что, хотя некоторые люди называют IEFE, как в исходном коде, я считаю, что это плохая практика. – Sethen

+0

Почему названные функции будут плохой практикой? Они полезны при отладке и сохраняют код выразительным, мне все равно, есть ли у IE проблемы с ними. – Bergi

+0

Я говорю о 'var init = (function MyFunc() {// code}());' ... мне это не читаемо и может вызвать путаницу. – Sethen

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