Зачем передавать аргументами jQuery и window в IIFE?

Всем привет!

Не могу понять, объясните, пожалуйста.

Зачем передавать аргументами jQuery и window в IIFE, если они итак доступны внутри функции?
Также, зачем в параметре прописывают undefined?

Например:
(function(global, $, undefined) {
	//code
})(window, jQuery);


Спасибо.
  • Вопрос задан
  • 370 просмотров
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
В-нулевых: revealing module сильно устарел на данный момент, пора юзать настоящие модули, лучше всего — ES2015.

Во-первых, как правильно отметил Алексей Уколов, чтобы явно указать зависимости и предотвратить конфликты.
Во-вторых, чтобы вместо jQuery можно было передать, например, Zepto, а вместо window — какой-то другой скоуп, например, в nodejs нет window.
В-третьих, это дает возможность минификатору сжать внутри этой функции window (и остальные аргументы) до одной буквы.

Что же до undefined, то в sloppy-режиме (без 'use strict') можно переопределить undefined, как будто это простая переменная. Чтобы получить настоящий, неиспорченный undefined в функцию не передают один аргумент, непереданный аргумент по дефолту имеет значение undefined. Вот такие ужасы можно творить:
(function () {
    var undefined = 'wtf';
    console.log(undefined);
}())
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Как видите, в данном случае это нужно для того, чтобы можно было использовать другие имена переменных.
Ну и вообще, это хорошая практика - явно описать зависимости модуля.
Вот что за undefined я не знаю, возможно, авторы примера хотели показать, что третьего аргумента функция не принимает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы