javascirpt 匿名自执行函数

定义: (function( window, undefined ) {})(window);
Jquery插件定义: (function( $, undefined ) {})(jQuery); 同理

说明:红色部份其实是个匿名函数,用小括号括起来其实是使其函数建立后返回一个函数指针,这时函数指定和后面蓝色部份的实参变量连接起来,形成了 函数名(参数) 的样式,使匿名函数建立完立即执行。

下面为详细说明:

1.(function(window,undefined){  //code  })(window)
说明:
a、匿名的意思是没有声名函数的名字,这样就使得函数外部无法访问匿名自执行函数的内部,防止函数之间变量命名的相互干扰,通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间下,你可以玩命定义你的var变量而不会破坏全局的命名空间。
b、通过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window;这还不是关键所在,更重要的是,将window作为参数传入,可以在压缩代码时进行优化.

作Jquery插件时传入的不是window是jQuery,因为你要操作$

c、参数列表中增加undefined,确保undefined是真的未定义。因为undefined能够被重写,赋予新的值。(undefined = "123";)这样。
d、一种替代的写法如下:
function myFun(){ 
    //函数体 

myFun();  //运行函数  
写法就简洁多了。
e、那么如何访问匿名函数里面的函数呢?通常是在里面的函数或变量前加上window,这样该函数或变量就成为全局的了,在同个页面,即使是不同我js文件,也可以访问到,所以只要某个页面中加入jquery.js,那么其它js文件就可以用jquery(*)来访问jquery.js中的函数。

像jquery在匿名函数内的最后一句为:
    window.jQuery = window.$ = jQuery;  
此处将匿名函数内定义的jQuery变量赋值给了全局变量window.jQuery和window.$(此处的window是匿名函数运行时传入的参数,指向全局的window对象),所以我们就可以在自己的代码中通过‘$’ or ‘jQuery’开始美妙的jQuery之旅了。
f、jQuery就是一个大的立即执行匿名函数。
jQuery插件代码格式:
;(function($){// 可以去掉开头的 ; (分号),国外的开发人员编写的插件时的一种习惯 
     $.fn.pluginName = function() {     
           // Our plugin implementation code goes here.     
     };
})(jQuery);    //传入一个jQuery的参数(其是就是匿名函数的参数$的值为jQuery),是因为该方法是对jQuery库的扩展,那么在该方法体内就可以调用jQuery库中的函数;若不传
入,则无法调用jQuery库 

你可能感兴趣的:(javascirpt 匿名自执行函数)