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

(转)javascript 匿名函数的理解,js括号中括function 如(function(){})

转至:

http://hi.baidu.com/zwnjiejie/blog/item/3f3c8a89506358be0e244456.html/cmtid/fcdc252a532d2c95023bf67e#0

?

javascript 匿名函数的理解,js括号中括function 如(function(){})
2010-06-28 15:31

代码如下:
(function(){?
//这里忽略jQuery所有实现?
})();?
(function(){ //这里忽略jQuery所有实现 })();

  半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的。然而,在看到源码的第一眼,我就迷糊了。为什么只有一个匿 名函数又没看到运行(当然是运行了……),就能有jQuery这么个函数库了?于是,我抱着疑问来到CSDN。结果相信现在很多人都很清楚了(因为在我之 后也不乏来者,呵呵~)。当一个匿名函数被括起来,然后再在后面加一个括号,这个匿名函数就能立即运行起来!真神奇哦!?
  嘿嘿!胡闹到此为止。在这一节,我们碰到的jQuery片段是一组立即运行的匿名函数。而这种用法在论坛上也曾引起过激辩——这段代码究竟属不 属于闭包呢?带着这个疑问,我们从基础开始,分析每个关键要素,寻找属于自己的答案。(没错,自己的答案!在我看来,所有理论只是形式,只要它有利于我们 的应用实现,就是可取的——黑猫白猫,抓到老鼠的就是好猫!)?
  要说匿名函数,我们首先要由函数本身说起。函数的定义如下:?
函数是将唯一的输出值赋予给每一输入的“法则”。?
  当然,这只是数学上的定义。但是,在计算机编程语言中,函数的定义也八九不离十。因为,我们都知道,计算机中的函数,也类似数学定义中的描述,它是将输入的若干数据,经过代码设定的逻辑操作处理后,返回唯一的输出的一组代码组合块。——当然,特例是,输入的数据为空或输出的数据为空,或者两者都为空。?
  下面,我们先初步了解一下和匿名函数相关的概念。?
函数声明(function 语句)?
  要使用一个函数,我们就得首先声明它的存在。而我们最常用的方式就是使用function语句来定义一个函数,如:?
复制代码 代码如下:
function abc(){?
// code to process?
}?
function abc(){ // code to process }?
  当然,你的函数也可以是带参数的,甚至是带返回值的。?
view plaincopy to clipboardprint??
function abc(x,y){?
return x+y;?
}?
function abc(x,y){ return x+y; }

  但是,无论你怎么去定义你的函数,JS解释器都会把它翻译成一个Function对象。例如,你在定义上面的其中一个例子的函数号,再输入如下代码:?
alert(typeof abc);// "function"?
  你的浏览器就会弹出提示框,提示你abc是一个Function对象。那么Function对象究竟是什么呢??
Function 对象?
  Function对象是JavaScript里面的固有对象,所有的函数实际上都是一个Function对象。关于这个方面的讨论,我们留到下一个专题节。我们先看看,Function对象能不能直接运用构造函数创建一个新的函数呢?答案是肯定的。例如:?
复制代码 代码如下:
var abc = new Function("x","y","return x*y;");?
alert(abc(2,3)); // "6"?
var abc = new Function("x","y","return x*y;"); alert(abc(2,3)); // "6"

  相信大家现在对如何声明一个函数应该是有所了解了。那么什么才是匿名函数呢??
声明匿名函数?
  顾名思义,匿名函数就是没有实际名字的函数。例如,我们把上面的例子中,函数的名字去掉,再判断一下他是不是一个函数:?
复制代码 代码如下:
alert(typeof function(){});// "function"?
alert(typeof function(x,y){return x+y;});// "function"?
alert(typeof new Function("x","y","return x*y;"))// "function"?
alert(typeof function(){});// "function" alert(typeof function(x,y){return x+y;});// "function" alert(typeof new Function("x","y","return x*y;"))// "function"<