Переход в окно в IIFE и другие зависимости также из окна
Почему некоторые программисты переходят в глобальные window
объект, который, как я понимаю, предназначен для повышения производительности и минимизации преимуществ, а также других объектов / функций зависимости из точно того же глобального пространства window
но передается через другой параметр?
Но тогда они также используют функции из window
что они не проходят явно, как setTimeout()
,
(function (dependency1, dependency2, dependency3, dependency4) {
'use strict';
//body
window.setTimeout(function() { // <--
//body
}, 1000);
//etc.
}(window, window.document, window.AjaxRequest, window.util.padNumber)); // <--
Есть ли какие-либо преимущества в использовании верхнего варианта по сравнению со следующим, который в основном все еще имеет доступ к тем же зависимостям?
(function (window) {
'use strict';
//body
window.setTimeout(function() {
//body
}, 1000);
//etc.
}(window));
2 ответа
- Интерпретатору не нужно пересматривать область видимости, чтобы найти зависимости, они просто доступны в текущей области видимости.
- Расположение / пространства имен зависимостей могут измениться в будущем, но если вы передадите их в качестве параметров, вам просто придется изменить переданные параметры, а не все вхождения в вашем коде.
- Минификация, локальные переменные можно переименовать безопасно
Это сделано для того, чтобы придерживаться парадигмы ОТКРЫТЬ / ЗАКРЫТЬ.
принцип открытого / закрытого состояния гласит: "программные объекты (классы, модули, функции и т. д.) должны быть открыты для расширения, но закрыты для модификации"
Чтобы закрыть модификацию, вы передаете зависимости как параметр. Это позволяет программисту изменять его на лету, не беспокоясь о том, где оно используется в функции.