2

我是一个 javascript 新手,最近进入了以下代码。

(function($){

    if(!document.defaultView || !document.defaultView.getComputedStyle){
        var oldCurCSS = jQuery.curCSS;
        jQuery.curCSS = function(elem, name, force){
            if(name !== 'backgroundPosition' || !elem.currentStyle || elem.currentStyle[ name ]){
                return oldCurCSS.apply(this, arguments);
            }
            var style = elem.style;
            if ( !force && style && style[ name ] ){
                return style[ name ];
            }
            return oldCurCSS(elem, 'backgroundPositionX', force) +' '+ oldCurCSS(elem, 'backgroundPositionY', force);
        };
    }
})(jQuery);

是什么function($) {...} (jQuery)

PS:我也不太明白代码的用途......如果可能,请给出提示。

4

6 回答 6

3

这是一个自动执行的匿名函数,以jQuery作为参数调用,并被重命名为$函数签名内部。

由于您不知道是否jQuery.noConflict()已在页面中使用(特别是如果您正在编写像插件这样的可分发代码),因此您可以$安全地在函数中使用速记。

写它的人实际上很愚蠢,因为jQuery无论如何他都在函数内部使用:)

它还可以防止变量污染全局命名空间并将它们封装起来,使它们无法从函数外部访问。

于 2013-05-09T12:08:28.767 回答
2

这是为了防止代码干扰名为 的全局变量$,以便您也可以使用其他使用该$符号的库。

在函数内部,$只会引用 jQuery 对象。

请参阅http://docs.jquery.com/Plugins/Authoring

于 2013-05-09T12:09:54.970 回答
1

这是为了确保$与 的意思相同jQuery。其他库可能会改变什么$意思,所以这是需要的。

function($)jQuery作为参数调用,因此被$设置为jQuery函数内。

于 2013-05-09T12:08:43.737 回答
1

这是一个自执行函数,可以把它想象成 jQuery 中的 document.ready 函数,除了这个函数一旦加载就会触发。

(function(){})将声明该函数,但通过添加()它可以立即触发。您也可以将参数 s 传递给此函数。$实际上是 的别名jQuery,因此为了确保您使用的jQuery是 ,这将作为参数传递并别名为$约定。

(function(myAwesomePlugin){})(jQuery);

这也是有效的。你可以像myAwesomePlugin("#id").click()...一样使用它

于 2013-05-09T12:09:01.283 回答
1

基本上它是一个匿名函数,它可以让 jQuery 与其他可能具有 $ 变量/函数的 javascript 库很好地配合使用。它在 DOM 被解析后立即执行,如果有多个外观,则按出现的顺序调用。然而此时文档并未显示,它只是被解析。

于 2013-05-09T12:09:44.747 回答
1

除了已经说过的,这个自执行函数封装了所有变量和其他函数,因此主(窗口)命名空间保持不受污染,因为所有变量和函数都是“本地的”。

于 2013-05-09T12:14:04.343 回答