Переход в окно в 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 ответа

Решение
  1. Интерпретатору не нужно пересматривать область видимости, чтобы найти зависимости, они просто доступны в текущей области видимости.
  2. Расположение / пространства имен зависимостей могут измениться в будущем, но если вы передадите их в качестве параметров, вам просто придется изменить переданные параметры, а не все вхождения в вашем коде.
  3. Минификация, локальные переменные можно переименовать безопасно

Это сделано для того, чтобы придерживаться парадигмы ОТКРЫТЬ / ЗАКРЫТЬ.

принцип открытого / закрытого состояния гласит: "программные объекты (классы, модули, функции и т. д.) должны быть открыты для расширения, но закрыты для модификации"

Чтобы закрыть модификацию, вы передаете зависимости как параметр. Это позволяет программисту изменять его на лету, не беспокоясь о том, где оно используется в функции.

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