日期:2014-05-16  浏览次数:20370 次

问一个关于 (function(){})() 的问题

首先这个东西的意思是立即执行函数吗?
发现很多插件都是用这种方式写的

我现在遇到的问题是:
图片插件(function(){。。。。。。。})()
我在document.ready里要操作$('#abc').html(str);其中图片插件里会操作str产生渐变等效果

但插件会先执行,document.ready会后执行,从而影响到了效果出现的时间。。
所以我想把document.ready改成(function(){})()方式。。
但这样好像会有不良后果?找资料说(function(){})()这种方式执行时,如果DOM还不存在会出错?
大家帮忙看看,谢谢


------解决方案--------------------
(function(){
//ZYL命名空间
if(!window.ZYL){window['ZYL'] = {};//命名空间定义
}

function page_change(framenum,framehref){
parent.frames[framenum].document.location = framehref;
};
window['ZYL']['page_change'] = page_change;

})();

上面的这个定义在调用的时候,可以ZYL.page_change("参数1","参数2");
这样可以自己写个函数放在里面,把关键的图片名称,地址什么的实际需要的以参数的形式进行传递,这样可以在document.ready里要操作$('#abc').html(str);这个操作之后加上ZYL.page_change("参数1","参数2");这样是否可以达到你想要的结果呢?

------解决方案--------------------
首先那是匿名函数立即执行的写法
其次之所以用document.ready 是因为里面的方法用到了页面的元素,需要等页面文档结构加载好了才去操作,否则会得不到对应的元素。
既然是插件而且是立即执行 里面怎么会操作到你的页面元素了呢 里面应该是应该是添加一些事件或者监听什么的
------解决方案--------------------
给你的图片插件写好传参的方法。在document.ready里把str或者说$(".test").html作为参数传给它的方法去执行效果,不就得了?

至于说“很多插件都是用这种方式写”,不要只看其表,不知其里,把相关的技术概念弄清楚,知道别人为什么用,才能知道自己是否该用和如何用。
------解决方案--------------------
(function(){
//这里面所有自定义的操作均在当前页面DOM加载完成后执行
//也就是说,你想让某个局部执行什么效果,先必须保证其DOM结构的存在以及完整性
$('#abc').html(str);//你可以先填充你的数据
//在后面再调用图片插件

})()