Почему эти два параметра в источнике jQuery?

Источник [jQuery](/tag5761) завернут в закрытие,
например:

```
(function(window, undefined) {
   //awesome [jQuery](/tag5761) library code in here
})(window);

```

Я не понимаю, почему один из этих параметров необходим.

Поскольку `window` - глобальная переменная, зачем ее
нужно передавать? Какова цель передачи в глобальном параметре и
доступа к нему внутри закрытия с тем же именем?

Каков параметр `undefined` для? Почему никакая
ценность не передается ему?

Я уверен, что на это уже был дан ответ, но:

* передача в окне a) позволяет сжатию кода изменять имя (т.е.
заменять его однобуквенным именем переменной в анонимной функции) и
b) гарантирует, что переменная ссылается на объект окна во время
определения библиотеки, на всякий случай, когда кто-либо
переопределит окно в глобальной области после загрузки jQuery.
* в том числе `undefined` как аргумент (но не
передается значение) делает то же самое для `undefined`
, что позволяет изменять переменные и избегать проблем, если
позволяет это).

Я полагаю, что в обоих случаях это должно ускорить ссылки на
переменную, поскольку это делает обе глобальные переменные
доступными в области функций, которые интерпретатор будет искать,
прежде чем искать в глобальной области. Но я не могу честно
представить, что разница в производительности здесь существенна - я
думаю, что самой большой проблемой является переименование имени
переменной, что делает более компактным код при его
минировании.