Это нормально, чтобы заменить окно с глобальным в IIFE?

При этом что-то кажется неправильным или грязным, но это кажется более семантическим, чем использование экспорта или окна. Это нормально?

(function(global){
  var foo,bar;
  foo = 'Private Var';
  global.bar = 'Hello World';
})(window);

3 ответа

Решение

Ваш образец в порядке. Учтите это, хотя:

// global code

(function () {

    var root = this;

    // use root variable to refer to the global object

}).call( this );

Эта модель не зависит от "window" имя, которое делает его портативным. (Имя "root" это, конечно, произвольно.)

Вы просто создаете псевдоним для окна, выполняя это, а не заменяя его. Мне нравится стиль. "глобальный" делает ваше намерение намного яснее.

Как говорили другие, вы не заменяете windowвы просто создаете для него псевдоним.
Ваша модель хороша, но я хочу сделать небольшое предложение: если вы используете этот IIFE в глобальном контексте, вы должны передать this как global аргумент, а не окно:

(function(global){

})(this);  

Это помогает вашему коду стать более кроссплатформенным, например, если вы создадите модуль, который работает в браузере, но работает и на другой платформе (например, как nodejs или rhino), где window объект не существует, или это не глобальный объект, которым вы хотите его видеть.

Другие вопросы по тегам