谁能告诉我JQuery里头部匿名函数有啥用

linxisheng 2011-05-24 04:59:55
网上有人说是防止重名冲突,啥啥了,还什么闭包啥的。

我就不明白有什么用,不过我还是知道这匿名函数是什么意思,就是把window作为参数传进去执行了一遍。

//这里是源码
(function (window, undefined) {
// Define a local copy of jQuery
var jQuery = function (selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init(selector, context);
}
//...
})(window);
我试了下 如果在后面重新定义$的话还是会覆盖JQuery中的$符号的

像这样直接写var jQuery = fun... 有什么关系,我怎么没发现它这么写有什么好处

求指点!
...全文
281 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
llyy112233 2011-05-25
  • 打赏
  • 举报
回复
(function (window, undefined) {
// Define a local copy of jQuery
var jQuery = function (selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init(selector, context);
}
//...

window.jQuery = window.$ = jQuery; //外面能够用$或jQuery函数,该句是关键
})(window);

立即执行的匿名函数起到 隔绝 变量作用域 的作用。如 :
(function() {
var test = function () {
alert(1);
}
})();
这是在外面调用test函数是错误的,也就是说是调用不到的。这样就避免匿名函数中的变量与 外面的变量冲突。如果我们需要开放test函数给外部使用,只需要注册成window的属性即可。如下:
(function() {
var test = function () {
alert(1);
}
window.test = test;
})();


KK3K2005 2011-05-25
  • 打赏
  • 举报
回复
是为了闭包
函数里面还有很多 内部变量
toury 2011-05-25
  • 打赏
  • 举报
回复
防止重名冲突不是指jQuery、$等本身防止冲突,而是把大量的变量名、函数名等封装在了JQ内部,不至于别人在外部不小心定义个ajax就把JQ的ajax覆盖了。

至于你说的“重新定义$的话还是会覆盖JQuery中的$”,JQ有noConflict()函数啊,你可以将JQ更名,为你自定义的$让步
mengnanleo 2011-05-25
  • 打赏
  • 举报
回复
(function(..){})(..)

=

function **(..){}
**(..)
dg393624170 2011-05-25
  • 打赏
  • 举报
回复
xuexi .........
llyy112233 2011-05-25
  • 打赏
  • 举报
回复
lz说 后面重新定义$的话还是会覆盖JQuery中的$符号的 。
覆盖的是window的$属性,而非jquery里面的变量。匿名函数中不开放的变量,外面是无法应用和修改的。

至于函数定义的写法

function test () {...}

var test = function (){...}

var test = function ooxx(){...}

以上三种都是可以的。很多大牛都推荐第二种写法,该写法更能体现在js中函数也是一种变量。
linxisheng 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xs8577 的回复:]

首先,直接写 var jQuery = function(){}
你还要自己主动调用一次 jQuery();

其次,我也不懂!
[/Quote]
不用再主动调用了,这个函数本来就不用执行,是JQuery选择器的函数
直接写跟外套个匿名函数效果完全一样的!
我在想是不是里面用到undefined这个参数,但它undefined这个应该跟系统自带的undefined同一个意思。所以貌似也没必要阿。
xs8577 2011-05-24
  • 打赏
  • 举报
回复
首先,直接写 var jQuery = function(){}
你还要自己主动调用一次 jQuery();

其次,我也不懂!

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧