2种写jquery的方式,有什么区别?

时间:2011-09-19 16:49:09

标签: javascript jquery

我有一个函数,里面有一些简单的表达式,添加nums,附加doms等。 因为我只需要调用一次,所以匿名函数可以这样做。但是我应该选择哪种方式以及有什么区别?

1:$(document).ready() {})的简写我看了很多,

$(function(){
    var something;
    ++something;
});

2:在jquery插件中找到。是否绑定到$(document).ready()?

(function ($) {
    var something;
    ++something;
})(jQuery);

6 个答案:

答案 0 :(得分:6)

第二个是 绑定到ready事件。

详细说明。这样:

$(function(){  /* ... */ });

需要定义变量$通常这个变量在加载jQuery时存在并指向jQuery函数。

随后,当您使用函数参数调用jQuery函数时,jQuery会将此函数参数绑定到ready事件。以上相当于

jQuery(function(){  /* ... */ });

这又是

的便利速记
jQuery(document).ready(function(){  /* ... */ });

您的第二个代码段

(function ($) { /* ... */ })(jQuery);

依赖于$被定义或指向jQuery()(如果多个JS框架并行加载,就会发生这种情况)。

要在某个代码区域内仍然方便$,它会创建一个 $定义的函数并指向jQuery()。但是,绑定到DOM事件。

但这将是:

(function ($) { 
   $(function(){  /* ... */ });
})(jQuery);

此设置用于最小化JS框架或依赖$的其他代码段之间的冲突。 jQuery插件作者使用它来编写在许多环境下工作的插件。


如果你认为组合的太复杂,jQuery也有一个速记功能,它可以避免变量冲突并同时绑定到document ready。但要小心,它只适用于jQuery并且有一些缺点。

jQuery(function($) { /* some code that uses $ */ });

有关详细信息,请参阅以下两篇文章:

  1. Using jQuery with Other Libraries
  2. .ready() @ api.jquery.com (Aliasing the jQuery Namespace)

答案 1 :(得分:3)

首先

这只是简写

<强>第二

您正在使用$沙箱来减少与使用$简写的其他库的冲突。

$只是jQuery变量的快捷方式,并且被传递到立即调用的函数的内部函数中...

实施例

var outerVar = "something";

(function innerFunc(passedVar) {

    passedVar === "something"; //true

})(outerVar);
执行

innerFunc并将outerVar作为参数传递。

答案 2 :(得分:2)

在您的第一个示例中,简写形式在功能上与$(document).ready()相同。

第二个例子是一个立即调用的匿名函数(感谢@Raynos进行更正:这通常被称为自调用函数;它不是一个)。该函数是以jQuery为参数定义并执行的。这种方法的一个优点是在函数内声明的变量不会“污染”全局(窗口)范围(相反,例如,简单地在函数外部运行该代码)。在您的示例中,something在函数外部未定义。

由于jQuery作为参数$被带入函数,$保证在该函数体内是jQuery - 即使在其他库正在使用{ {1}}在函数之外。

一个有用的旁注:命名“匿名”函数有时会有所帮助。呃功能保持不变,但名称可以使调试复杂代码变得更加容易。

$

答案 3 :(得分:1)

  1. 不,不是,它只是一个简写

  2. 不,不是。此代码确保$实际上是jQuery而不仅仅是另一个javascript库

答案 4 :(得分:1)

来自http://docs.jquery.com/Plugins/Authoring

  

但是等等!我知道并喜爱的令人敬畏的美元符号在哪里?它的   仍然存在,但要确保您的插件不会发生碰撞   与其他可能使用美元符号的图书馆一样,这是最好的   练习将jQuery传递给自动执行的函数(闭包)   将其映射到美元符号,以便它不会被另一个符号覆盖   库的执行范围。

答案 5 :(得分:0)

只需将两种风格组合在一起。

jQuery(function($) {
  // uses the real jQuery as $
  // code
});

第一个样式用于在DOM准备就绪时运行一些代码。

第二种风格用于确保$ === jQuery并使$成为局部变量(缩短查找时间的一小部分)