为什么jQuery可以从内部调用窗口,却要将窗口发送给自己



我自己也试过,我想这是某种闭包捕获,但我看不出其中的区别:

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

从jQuery的方式:

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

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

一个原因是让minifiers重命名变量,使其更加紧凑。

这是为了缩小/损毁。

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

windowundefined都是全局变量,它们不能被破坏,因为这显然会破坏代码。但是,如果将作用域变量分配给它们的值/引用,则这些变量可能会被破坏。如果您的库(如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);

相关内容

  • 没有找到相关文章

最新更新