之间有什么区别
(function($){
$(document).ready(function() {
$(this)/*... jQuery functions */
});
})(jQuery);
这个?
(function(jQuery){
jQuery(document).ready(function() {
var $ = jQuery;
$(this)/*... jQuery functions */
});
})(jQuery);
我什么时候应该使用它们?
答案 0 :(得分:2)
这两个例子的主要区别在于一个是更局部的范围。在第一个示例中,重定义的范围比第二个示例中的更高,其中它是局部变量。从理论上讲,本地范围内的那个可能会稍微快一些,但这是否有意义,或者取决于很多因素。
每个嵌套函数声明都有自己的局部变量集。当javascript解释器去查找像$
这样的变量的值时,它会在最本地范围(当前正在执行的函数的局部变量)中首先查找它。如果它没有在那里找到它,它会向上链寻找更高范围内的其他变量。如果在下一个更高级别的范围内找不到它,它就会继续上升。最终,它进入全局范围并在全局范围内搜索所需的符号。如果在那里找不到它,那么它是未定义的。
在您的第一个代码示例中,$
将在此更高的范围内找到,因为它不是直接执行的document.ready回调函数的局部变量。在你的第二个例子中,它将是一个真正的局部变量,因此可以稍微更快地找到它。
此外,两种情况都会将$
分配给范围内的非全局变量,以防止它被外部代码开始劫持。