1.  匿名函数实例:

>>> function ( a ){ return a; }

     匿名函数也就是说没有方法名。

2.  匿名函数的主要用法:

2.1 我们可以将匿名函数作为参数传递给其它函数,这样,接收方函数就能利用我们所传递的函数来完成某些事情。

2.2 我们可以定义某个匿名函数来执行某些一次性任务。

3.  接下来,我们来看具体的应用示例,通过其中的细节来进一步了解匿名函数。

3.1 回调函数

①.  解释: 当我们将函数A 传递给函数B ,并由B 来执行A 时,A 就成了一个 回调函数(callback function)。

  如果这时A 还是一个无名函数,那么我们就称它为 匿名回调函数

②. 回调函数的优势:

>>1.  它可以让我们在不做命名的情况下传递函数(这意味着可以节省全局变量)。 
 >>2.  我们可以将一个函数调用操作委托给另一个函数(这意味着可以节省一些代码编写工作)。 
  >>3.  它们也有助于提升性能。

③.  回调示例:

function multiplyByTwo(a , b , c) {   
 var i ,ar = [ ] ; 
  for ( i = 0 ; i <  3 ; i++) { 
 ar [ i ] = arguments [ i ] * 2; 
   } 
   return ar;  
   } 
    function addOne( a ) {  
   return a +1 ; 
      }

现在,我们来测试一下这两个函数:

>>>  multiplyByTwo( 1, 2, 3 ); 
  运行结果:[ 2, 4 ,6 ] 
  >>>  addOne( 100 ); 
   运行结果:101

接下来,我们要实现这三个元素在两个函数之间的传递,这需要定义一个用于存储元素的数组。我们先从multiplyByTwo ( ) 的调用开始:


>>>  var myarr = [ ] ; 
 >>> myarr = multiplyByTwo ( 10 , 20 ,30 ); 
   运行结果: [ 20 , 40 ,60 ]  
 
 然后,用循环遍历每个元素,并将它们分别传递给 addOne() 。 
  >>>  for ( var i =0 ; i < 3; i++ ) {  myarr [ i ] = addOne (myarr [ i ] );} 
   >>>  myarr 
   运行结果: [21 ,41, 61]

如您所见,这段代码可以工作,但是显然还有一定的改善空间。特别是这里使用了两个循环,如果数据量很大或循环操作很复杂的话,开销一定不小。因此,我们需要将它们合二为一。这就需要对multiplyByTwo() 函数做一些改动,使其接受一个回调函数,并在每次迭代操作中调用它。具体如下:

function multiplyByTwo (a , b, c, callback) {  
    var i , ar = [ ]; 
  for ( i = 0 ; i< 3 ; i ++){ 
   ar [ i ]  = callback(arguments [ i ] * 2);  
   } 
 return ar; 
   }

函数修改完成后,之前的工作只需要一次函数调用就够了,我们只需像下面初始值和回调函数传递给它即可:

>>>   myarr = multiplyByTwo ( 1 ,2 ,3, addOne ); 
 运行结果:[ 3, 5, 7]

我们还可以用匿名函数来代替addOne(),这样做可以节省一个额外的全局变量。

>>>  myarr   = multiplyByTwo( 1, 2, 3, function (a ) { return  a + 1} ); 
   运行结果:[3 , 5 , 7]

而且,使用匿名函数也更易于随时根据需求调整代码。例如:

>>>   myarr = multiplyByTwo ( 1 ,2 ,3, function( a ) { return a + 2; } ); 
 运行结果:[4, 6, 8]

3.2   自调函数

目前我们已经讨论了匿名函数在回调方面的应用。接下来,我们来看匿名函数的另一个应用示例——这种函数可以在定义后自行调用。比如:


{ 
  function (){ 
  alert( 'boo' ); 
  } 
  }( )

这种语法看上去有点吓人,但其实很简单——我们只需要将匿名函数的定义放进一对括号中,然后外面再紧跟一对括号即可。其中,第二对括号起到是“立即调用”的作用,同时它也是我们向匿名函数传递参数的地方。

( 
 function ( name ) { 
  alert( ' hello ' + name + ' ! '); 
 } 
  )('dude')

使用自调匿名函数的好处在于这样不会产生任何全局变量。当然,缺点是这样的函数是无法重复执行的(除非您将它放在某个循环或其它函数中)。这也使得匿名自调函数最适合于执行一些一次性的或初始化的任务。 

函数篇之——函数也是数据