Это нормально, чтобы заменить окно с глобальным в 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
объект не существует, или это не глобальный объект, которым вы хотите его видеть.