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

Why are these two parameters in the jQuery source for?

本文关键字:jQuery 源码 为什么 参数 两个      更新时间:2023-09-26

jQuery源代码被封装在闭包中,如下所示:

(function(window, undefined) {
   //awesome jQuery library code in here
})(window);

我不明白为什么需要这两个参数。

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

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

我很确定这个问题已经得到了回答,但是:

  • window中传递a)允许代码压缩来改变名称(即在匿名函数中替换为单个字母的变量名称)和b)确保变量在定义库时引用窗口对象,以防在jQuery加载后任何人在全局范围内重新定义window

  • 包括undefined作为参数(但不传递值)对undefined做同样的事情,允许变量修改并避免问题,如果undefined变量被重新定义(是的,Javascript允许这一点)。

我相信在这两种情况下,这应该加快对变量的引用,因为它使两个全局变量在函数作用域中可用,解释器将在全局作用域中查找之前搜索。但老实说,我无法想象这里的性能差异有多大——我认为最大的问题是变量名的变化,这使得在最小化时代码更紧凑。