为什么这两个参数在jQuery源代码中?

Pet*_*son 6 javascript jquery

jQuery源包装在一个闭包中,如下所示:

(function(window, undefined) {
   //awesome jQuery library code in here
})(window);
Run Code Online (Sandbox Code Playgroud)

我不明白为什么需要这些参数.

既然window是全局变量,为什么需要传入呢?传递一个全局参数并在闭包内使用相同名称访问它的目的是什么?

什么是undefined对的参数?为什么没有传递给它的任何价值?

nra*_*itz 11

我很确定这已经得到了解答,但是:

  • 传入windowa)允许代码压缩使名称变硬(即用匿名函数中的单字母变量名替换它)和b)确保变量在定义库时引用窗口对象,以防万一window加载jQuery后重新定义全局范围.

  • 包括undefined作为一个参数(但不传入一个值)做同样的事情undefined,允许变量重组和避免问题如果undefined重新定义变量(是的,Javascript允许这样).

我相信在这两种情况下,这应该加速对变量的引用,因为它使得两个全局变量在函数范围内可用,解释器在查看全局范围之前将搜索该变量.但我不能诚实地想象这里的性能差异很大 - 我认为最大的问题是变量名称munging,这使得缩小时的代码更加紧凑.

  • @PeterOlson - 如果以后重新定义的话 - 不会修复jQuery库加载时的`window`引用,所以后续的`window` shenanigans不会有任何影响.我想如果你在库加载之前重新定义窗口,这将会破坏,但是你得到你得到的东西:). (2认同)