我自己试过这个,我想它是某种关闭捕获,但我看不出这有什么区别:
(function() {
var tvLib = {}
window.tvLib = tvLib
})();
从 jQuery 方式:
(function(window, undefined) {
var jq;
window.jq = jq;
})(window);
我很困惑为什么我需要发送窗口对象,如果我可以调用它的话。
我自己试过这个,我想它是某种关闭捕获,但我看不出这有什么区别:
(function() {
var tvLib = {}
window.tvLib = tvLib
})();
从 jQuery 方式:
(function(window, undefined) {
var jq;
window.jq = jq;
})(window);
我很困惑为什么我需要发送窗口对象,如果我可以调用它的话。
一个原因是让缩小器重命名变量以使其更紧凑。
这是为了缩小/修改目的。
Mangling 包括将作用域变量重命名为更短的名称,以获得一些字符并混淆代码。例如,每次出现的作用域变量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);