jQuery,关于$(function(){ }) 和 $(function($){ }) 有什么不一样? 本帖最后由 helloword222 于 2013-07-16 00:05:36 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只见过(function($){...})(jQuery)这种形式的$已经是全局变量了,又作为参数传进方法体,没什么区别,不知是作何用意 参数形式传递$可以用闭包将$变量保护起来在jquery加载一次的情况下无区别多次加载jquery的情况下是必要的,如:<script src='jquery1.7.js'></script><script> (function($){ $.fn.test1 = function(){ alert(this.html()); } $('body').click(function(){ $(this).test1();//输出body的html }); })(jQuery) (function(){ $.fn.test2 = function(){ alert(this.html()); } $('body').click(function(){ $(this).test2();//异常,test2未定义,因为$变量已被重置 }); })()</script><script src='jquery1.4.js'></script> jQuery又给你把$传递到function内部了,当做第一个参数了,免得你在内部使用jQuery,还要去全局作用域下找,少了一层变量查询,多好啊。理论上会提高效率的,实际可能差别不大。 默认情况下,用jQuery框架有$===jQuery,但是当$(function($){ // // code 该函数内部 $===jQuery true //})$(function(jQ){ // // code 该函数内部 jQ===jQuery true 有用到$的地方都可以换成jQ,即使$=undefined后,还可以用jQ代替 //})这样我们调用多个js库的时候出现,即使出现$符合冲突也可以自定义其他名称代替 同意6#的说法由于JS变量作用域的关系,一般碰到变量JS的查找先从就近开始,比如在function中先找,找不到遍历到该function外部的function继续,直到最顶层的代码,且不论在哪个位置定义的,故如此书写节省了遍历查找的运算时间 怎么理解?先看下jauery的源代码 同意#6 同意#8function A(k){ //只需明白this 是谁; //k 是谁 var $ = this; var $$ = k; }function B(D){ } ///1=2=3//-------------1-------------------var $readyList = $.Deferred();var $rl_promise = $readyList.promise();$rl_promise.done(A);$rl_promise.done(B);//$readyList.resolveWith(document,[jQuery]);//--------------2------------------var $$readyList = $.Callbacks('once memory');$$readyList.add(A);$$readyList.add(B);//$$readyList.fireWith(document,[jQuery]);//-------------3-----------------var $$$readyList = [A,B];for(var i=0;i<$$$readyList.length;i++){ $$$readyList[i].call(document,jQuery);} Js可能造成了死循环? 图片一直在下载, 本地测试是没问题的 javascript高手请进,非高手莫进。。 如何用javascript获取一个图像的RGB值? 打印怎么所得不是所见?为什么绝对位置的元素的打印却打到了另一页? 图片变化显示效果改成动态读取路径后的显示问题 一个关于document.write()的问题 主题:关于隐藏网页文件的文件名问题 高分求教大虾!ie中打印如何实现分页打印? 問題很簡單,請幫我看一下:這個頁面為什麼一按刪除按鈕就會出錯呢? 关于jquery 的animate,height为自适应的问题 [求助] 能不能这样赋值
$已经是全局变量了,又作为参数传进方法体,
没什么区别,不知是作何用意
在jquery加载一次的情况下无区别
多次加载jquery的情况下是必要的,如:<script src='jquery1.7.js'></script>
<script>
(function($){
$.fn.test1 = function(){
alert(this.html());
}
$('body').click(function(){
$(this).test1();//输出body的html
});
})(jQuery)
(function(){
$.fn.test2 = function(){
alert(this.html());
}
$('body').click(function(){
$(this).test2();//异常,test2未定义,因为$变量已被重置
});
})()
</script>
<script src='jquery1.4.js'></script>
//
// code 该函数内部 $===jQuery true
//
})
$(function(jQ){
//
// code 该函数内部 jQ===jQuery true 有用到$的地方都可以换成jQ,即使$=undefined后,还可以用jQ代替
//
})
这样我们调用多个js库的时候出现,即使出现$符合冲突也可以自定义其他名称代替
由于JS变量作用域的关系,一般碰到变量JS的查找先从就近开始,比如在function中先找,找不到遍历到该function外部的function继续,直到最顶层的代码,且不论在哪个位置定义的,故如此书写节省了遍历查找的运算时间
先看下jauery的源代码
//只需明白this 是谁;
//k 是谁
var $ = this;
var $$ = k;
}
function B(D){
}
///1=2=3//-------------1-------------------
var $readyList = $.Deferred();
var $rl_promise = $readyList.promise();
$rl_promise.done(A);
$rl_promise.done(B);
//$readyList.resolveWith(document,[jQuery]);//--------------2------------------
var $$readyList = $.Callbacks('once memory');
$$readyList.add(A);
$$readyList.add(B);
//$$readyList.fireWith(document,[jQuery]);//-------------3-----------------
var $$$readyList = [A,B];
for(var i=0;i<$$$readyList.length;i++){
$$$readyList[i].call(document,jQuery);
}