Javascript 2种编写jquery的方式,what';有什么区别?
我有一个函数,里面有一些简单的表达式,添加NUM,附加DOM,等等。 因为我只需要调用它一次,所以一个匿名函数就可以做到。但是我应该选择哪种方式,有什么区别呢 1:document.ready(){}的缩写我经常看到这个Javascript 2种编写jquery的方式,what';有什么区别?,javascript,jquery,Javascript,Jquery,我有一个函数,里面有一些简单的表达式,添加NUM,附加DOM,等等。 因为我只需要调用它一次,所以一个匿名函数就可以做到。但是我应该选择哪种方式,有什么区别呢 1:document.ready(){}的缩写我经常看到这个 $(function(){ var something; ++something; }); 2:在jquery插件中找到。它也绑定到$(document).ready()了吗 不,不是,只是个速记 不,不是。这段代码确保$jQuery是真正的jQuery,而不
$(function(){
var something;
++something;
});
2:在jquery插件中找到。它也绑定到$(document).ready()了吗
首先 这只是速记 秒 您正在沙箱化
$
的使用,以减少与使用$
速记的其他库的冲突
$
只是jQuery
变量的快捷方式,并被传递到立即调用函数的内部函数中
范例
var outerVar = "something";
(function innerFunc(passedVar) {
passedVar === "something"; //true
})(outerVar);
执行
innerFunc
,并将outerVar
作为其参数传递。首先
这只是速记
秒
您正在沙箱化$
的使用,以减少与使用$
速记的其他库的冲突
$
只是jQuery
变量的快捷方式,并被传递到立即调用函数的内部函数中
范例
var outerVar = "something";
(function innerFunc(passedVar) {
passedVar === "something"; //true
})(outerVar);
innerFunc
被执行并作为参数传递给outerVar
。在第一个示例中,速记形式在功能上与$(document).ready()相同
第二个例子是立即调用的匿名函数(感谢@Raynos的更正:这通常称为自调用函数;它不是一个)。该函数以jQuery
为参数,就地定义和执行。这种方法的一个优点是,在函数内声明的变量不会“污染”全局(窗口)范围(例如,与在函数外运行代码相反)。在您的示例中,函数外部未定义某个
由于jQuery
作为参数$
引入函数中,$
保证是该函数体中的jQuery,即使其他库在函数外部使用$
一个有用的补充说明:有时命名“匿名”函数很有帮助。功能保持不变,但名称可以使调试复杂代码变得更容易
(function superFunction (foo) { // naming this "superFunction"
var something = 10;
do_something_with( foo, something );
})(bar);
在第一个示例中,速记表单在功能上与$(document).ready()
相同
第二个例子是立即调用的匿名函数(感谢@Raynos的更正:这通常称为自调用函数;它不是一个)。该函数以jQuery
为参数,就地定义和执行。这种方法的一个优点是,在函数内声明的变量不会“污染”全局(窗口)范围(例如,与在函数外运行代码相反)。在您的示例中,函数外部未定义某个
由于jQuery
作为参数$
引入函数中,$
保证是该函数体中的jQuery,即使其他库在函数外部使用$
一个有用的补充说明:有时命名“匿名”函数很有帮助。功能保持不变,但名称可以使调试复杂代码变得更容易
(function superFunction (foo) { // naming this "superFunction"
var something = 10;
do_something_with( foo, something );
})(bar);
发件人:
但是等等!我所知道和喜爱的令人敬畏的美元符号在哪里?它是
不过,为了确保你的插件不会发生冲突,仍然存在
对于其他可能使用美元符号的图书馆来说,这是最好的选择
将jQuery传递给一个自动执行函数(闭包)的实践
将其映射到美元符号,这样它就不会被其他符号覆盖
在其执行范围内的库
发件人:
但是等等!我所知道和喜爱的令人敬畏的美元符号在哪里?它是
不过,为了确保你的插件不会发生冲突,仍然存在
对于其他可能使用美元符号的图书馆来说,这是最好的选择
将jQuery传递给一个自动执行函数(闭包)的实践
将其映射到美元符号,这样它就不会被其他符号覆盖
在其执行范围内的库
把这两种风格结合起来就行了
jQuery(function($) {
// uses the real jQuery as $
// code
});
第一种样式用于在DOM就绪时运行一些代码
第二种样式用于确保$==jQuery
,并使$
成为局部变量(将查找时间减少一小部分)只需将这两种样式组合起来即可
jQuery(function($) {
// uses the real jQuery as $
// code
});
第一种样式用于在DOM就绪时运行一些代码
第二种样式用于确保$==jQuery
,并使$
成为局部变量(将查找时间减少一小部分)第二种样式不绑定到就绪
事件
详细地说。这:
$(function(){ /* ... */ });
需要定义变量$
。通常,当jQuery被加载并指向jQuery函数时,这个变量就存在了
随后,当您使用函数参数调用jQuery函数时,jQuery将此函数参数绑定到ready
事件。以上相当于
jQuery(function(){ /* ... */ });
这反过来又是一个方便的简写
jQuery(document).ready(function(){ /* ... */ });
您的第二个代码段
(function ($) { /* ... */ })(jQuery);
不依赖于定义$
或指向jQuery()
(如果并行加载多个JS框架,则可能发生这种情况)
为了在特定的代码区域内仍能方便地使用$
,