Javascript 用于扩展jQuery的奇怪语法

Javascript 用于扩展jQuery的奇怪语法,javascript,jquery,Javascript,Jquery,我最近在另一篇帖子上看到了这段代码() 在花了很长时间试图理解它在做什么之后,我最终发现它只是用参数$创建了一个新函数,然后用jQuery作为参数值调用它 所以实际上,它只是这样做: jQuery.fn.setCursorPosition = function(pos) { // function body omitted, not relevant to question } 原始版本更混乱的原因是什么?对于大块代码,使用$比使用jQuery要好得多 当使用多个库时,人们通常会禁用$

我最近在另一篇帖子上看到了这段代码()

在花了很长时间试图理解它在做什么之后,我最终发现它只是用参数$创建了一个新函数,然后用jQuery作为参数值调用它

所以实际上,它只是这样做:

jQuery.fn.setCursorPosition = function(pos) {
    // function body omitted, not relevant to question
}

原始版本更混乱的原因是什么?

对于大块代码,使用
$
比使用
jQuery
要好得多

当使用多个库时,人们通常会禁用
$
快捷方式,因为许多库都使用它。这样编写代码允许用户使用快捷方式编写代码,而不必担心与其他库发生冲突。由于该网站适用于广泛的受众,无论用户是否启用了
$
,使用该代码最有可能奏效

new function($) {
    $.fn.setCursorPosition = function(pos) {
        // function body omitted, not relevant to question

       // You are safe to always use $ here 
    }
} (jQuery);


由于其他JavaScript库可能全局使用
$
,因此您的库应该显式引用
jQuery
,以防止冲突。通过使用参数
$
创建函数,可以将
jQuery
对象绑定到该函数范围内的变量。这使您能够安全地显式指定
jQuery
对象,并方便地使用
$
速记

这是我习惯看到的模式:

(function($) {
  // code using $ goes here
})(jQuery);

这似乎也是jQuery插件中防止冲突的一种非常常用的做法。
jQuery.fn.setCursorPosition = function(pos) {
    // function body omitted, not relevant to question

    // you have to make sure $ was not overwritten before using it here..
}
(function($) {
  // code using $ goes here
})(jQuery);