首页 > 代码库 > js中,(function(){})()的用法解析

js中,(function(){})()的用法解析

经常用,今天总结一下,下文摘自某网友的总结:

(function($){...})(jQuery)实际上是匿名函数,不懂得朋友可以继续往下看。

这里实际上是匿名函数 function(arg){...} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即: (function(arg){...})(param) 这就相当于定义了一个参数为arg的匿名函数,并且将param作为参数来调用这个匿名函数 而(function($){...})(jQuery)则是一样的,之所以只在形参使用$,是为了不与其他库冲突,所以实参用jQuery var fn = function($){....}; fn(jQuery);

(funtion(){})();立即执行函数;相当于先申明一个函数,声明完后直接调用;如果参数如:
(funtion(str){alert(str)})("output"));相当于:funtion OutPutFun(str){alert(str);};OutPutFun("output");

 

 

 

 

 

最近在整理

javascript

学习,发现这个问题了

 

,在网上发现这么个解释

 

最清

 

最明白

 

 

(function(){})()

相当于先定义

 function xx(){}

,后调用

 xx();

()

是最高优先级的,所以先执行

function(){}

 

这个定义了一个匿名函数,等于

xx=function(){}

接着就是调用

xx()

;

给个例子

 

JScript code

functionf1(a)

 

  

{

 

 alert(a);

 

  

 

 

 

 

 

}

 

 functionf2(a)

 

{

 

 

 returnfunction(){

alert(a);

}

 

  

 

 

 

 

}

 

这里的

var x=f2

就等于把函数传递给了

f2,

然后要执行这个函数

,

就必须加

()

也就是

x();

也就是

f2()  

还是

(function f2(a){

 

  return function(){

 

  alert(a); 

 

 })();

 

另外还有一个问题

 

就是命名空间的问题

 

YY = YY||{};---

声明一个叫

YY

的命名空间(定义一个全局的变量)

 

(function() {

 

YY.Lang=function()

{------

声明一个叫

YY.Lang

的命名空间

(通过全局变量的

增加属性的方式把闭包里的对象传到全局变量中,实现代码封装的效果)

 

isUndefined: function(o) {

 

  return typeof o === ‘undefined‘;

 

  },

 

isString: function(o) {

 

  return typeof o === ‘string‘;

 

  }

 

};

 

 

})();

 

 

---

调用方法

 

alert(YY.Lang.isString(‘test me‘));

 

 

这时候就有人不明了,

楼上为什么要加

(function()

{

)();

最外面的这两行,

有什么用啊?

 

 

 


 

J

Script code

 

YY=YY||{};

//---

声明一个叫

YY

的命名空间(定义一个全局的变量)

 

//(

 

function()

{

YY.Lang=function()

{

 

//------

声明一个叫

YY.Lang

的命名空间

(通过全局变量的增加属性的方式把闭包里的对象传

到全局变量中,实现代码封装的效果)

 

isUndefined:function(o)

{returntypeofo===‘undefi

ned‘;

},

 

 isString:function(o)

{returntypeofo===‘string‘;

}

};

}

 

 

//)();

 

//---

调用方法

 

 alert(YY.Lang.isString(‘test

me‘));  

 

疑问在这:??????

 

 

 

注释掉这两行有什么不一样的呢?不就是申明吗,为什么要用

()()执行一下啊?

 

答:

 

(

function(){})()

意思是立即执行前一个括号里的

function

,相当于是一个匿名函数

;

由于里面

的代码的执行,

定义了

YY.Lang

这个对象,

所以可以执行

alert(YY.Lang.isString(‘test

me‘));

调用

isString

方法。

 

但是,如果按照你写的

functionaa(){..};//

只是定义了一个叫

aa的函数,但是并没有执行


alert(YY.Lang.isString(‘test

me‘));//

执行的时候会报找不到

isString

的方法。

这么写有什么好处??????????????

(function{})()

的写法有个好处,就是能很好的利用

javascript
的变量的可见范围为执行脚本

时节省空间。例如以下写法

1和写法2达到的目的是一样的,但是写法1的由于a变量的

可见范围只是在匿名函数体内,

所以a

在执行完这个匿名函数后就释放空间了。

但是写法2

会一直存在该页面中。

 

写法

1

 

JScript

code

 

(function(){vara=2;

alert(a);

})();

 

 

写法

2

 

JScript

code

 

vara=2;

alert(a);