这篇非本人原创, 原创地址为: http://20032334.iteye.com/blog/288989 最近在看jquery源码 觉得这篇很有用就记录下来了
<!-- [if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]-->
格式:
(function(){
//代码
})();
解释:这是相当优雅的代码(如果你首次看见可能会一头雾水:)),包围函数(function(){}) 的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为 匿名函数 的参数。
来个带参数的例子:
(function(arg){
alert(arg+100);
})(20);
这个例子返回120 。
重要用途:可以用它创建命名空间 ,只要把自己所有的代码都写在这个特殊的函数包装内,那么外部就不能访问,除非你允许。 (jquery 就是这么干的)
(function(){
function $(id){
return document.getElementById(id);
}
function __addClass(id,className,classValue){
$(id).style.className=classValue;
}
window['mySpace']={};
window['mySpace']['addClass']=__addClass;
})();
上面的例子就可以用这种伪命名空间封装并保护自己的所有函数、对象和变量。而且,由于它们位于同一个函数中,所以可以互相引用。为了对受保护的代码进行全局化,随后的一对括号告诉浏览器立即执行返回的 匿名函数 ,而且在执行期间将__addClass() 赋值给了 window 的一个方法 , 这样在外部只能执行 addClass 而 __addClass 被保护起来了。我可以这样 调用 它:mySpace.addClass('oneId','font-width','bold');