0

我自己试过这个,我想它是某种关闭捕获,但我看不出这有什么区别:

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

从 jQuery 方式:

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

我很困惑为什么我需要发送窗口对象,如果我可以调用它的话。

4

2 回答 2

2

一个原因是让缩小器重命名变量以使其更紧凑。

于 2013-12-03T22:53:34.467 回答
1

这是为了缩小/修改目的。

Mangling 包括将作用域变量重命名为更短的名称,以获得一些字符并混淆代码。例如,每次出现的作用域变量myVariable都可以被修改,以便在每次出现在代码中时都a获得字符。9

window并且undefined都是全局变量,它们不能被破坏,因为它显然会破坏代码。但是,如果您将作用域变量分配给它们的值/引用,则这些变量可能会被破坏。如果您的库(如 jQuery)大量使用windowundefined,则此技术有助于进一步减少代码大小。

所以,以你为例:

(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);
于 2013-12-03T23:05:56.663 回答