Почему jQuery отправляет окно в себя, когда он может просто вызвать его изнутри

0

Я пробовал это сам, и я полагаю, что это своего рода закрытие, но я не вижу разницы в этом:

(function() {
 var tvLib = {}
 window.tvLib = tvLib
})();

из jQuery:

(function(window, undefined) {
var jq;
window.jq = jq;
})(window);

Я растерялся, почему мне нужно отправить объект окна, если я могу назвать его в любом случае.

  • 3
    использовать локальную копию переменной вместо глобальной, повысить производительность
  • 0
    хорошо .. тогда я должен рассмотреть это еще немного. Если это правда, можете ли вы опубликовать это как ответ?
Теги:
window-object

2 ответа

2
Лучший ответ

Одна из причин заключается в том, чтобы позволить minifiers переименовать переменную, чтобы сделать ее более компактной.

1

Это для целей минимизации/искажения.

Mangling состоит из переименования переменных с ограниченным именем для более коротких имен, чтобы получить некоторые символы и обфускать код. Например, каждое вхождение переменной с переменным myVariable может быть myVariable до a, чтобы получить 9 символов каждый раз, когда оно появляется в коде.

window и undefined являются глобальными переменными, они не могут быть искалечены, потому что это, очевидно, нарушит код. Но если вы назначаете переменную с привязкой к их значению/ссылке, это может быть искажено. Если ваша библиотека (например, jQuery) использует большое window или undefined, этот метод помогает еще больше уменьшить размер вашего кода.

Итак, возьмем ваш пример:

(function(window, undefined) {
  var jq;
  window.jq = jq;
})(window);

Дал бы что-то вроде этого искалеченным:

(function(a, b) {
  var c;
  a.c = c;
})(window);

С другой стороны, важно использовать синтаксис типа массива, когда вы хотите экспортировать глобальные переменные, чтобы избежать их искажения. Таким образом, вы можете смело ссылаться на них извне.

Это было бы лучше в вашем примере:

(function(window, undefined) {
  var jq;
  window['jq'] = jq;
})(window);

Дал бы что-то вроде этого искалеченным:

(function(a, b) {
  var c;
  a['jq'] = c;
})(window);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню