为什么将jQuery作为参数传递给(function($){.})(jQuery)闭包包装器,而不是本地变量?

Why pass jQuery as an argument to (function($){..})(jQuery) closure wrapper, instead of local var?

本文关键字:jQuery 变量 包装 参数传递 function 为什么 闭包      更新时间:2023-09-26

闭包包装器(function($){..})(jQuery);是使用局部变量而不是全局变量的好方法。$以及在包装器中定义的任何变量和局部函数仅在包装器内部可见,而在包装器外部不可见。这很好,我一直在用。

(function($){
  [..]
})(jQuery);

然而,我一直想知道为什么我们传递jQuery(可能还有其他东西)作为参数,而不是使用局部变量声明。

(function(){
  var $ = jQuery;
  [..]
})();

这样做不是也一样好,而且更透明吗?

我看到前一种方式更好的一个原因:

(function(){
  var $ = jQuery;
  [..]
  var jQuery = foo;
})();

在这个例子中,变量"$"将因为提升而未定义。

在代码长度方面有一个优势。它节省了几个字符(字节…)。它不多,但如果你必须在这两个例子中做出选择,第一个例子更短。

为了简化,也可以(在某种程度上是常见的)使用"unset"变量作为未定义匹配,如下所示:

(function(r,u){if(r.missingProp===u)alert('undefined!')})({realProp:1})

由于u在调用期间没有传递值,因此它将等于undefined