6.函数也是数据

对JavaScript来说,函数是一种数据类型,只不过这种特殊的数据类型有两个重要特性:

  • 它们所包含的是代码
  • 它们是可以执行的(或者说是可以调用的)

下面两种函数定义在本质上是相同的,typeof操作符返回的字符串将会是“function”。

function f(){return 1;}
var f = function(){return 1;}

匿名函数

在JavaScript中,程序中可能存在下面这种数据片段。虽然代码看上去很奇怪,因为它实际上什么也做不了,但它是符合语法的,并不会引发任何错误。

“test”;[1,2,3];undefined;null;1

而且我们已经知道,函数在本质上与其他变量并无区别,因此它也可以在没有名字的情况下被使用:

function(a){return a;}

回调函数

既然函数可像其他数据那样赋值给某个变量,可以被定义、删除、拷贝,那么函数也可以当成参数传递给其他函数。

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

自调函数

(
   function(name){
      alert('Hello'+name+'!');
   }
)('dudu')

第二对括号起到的作用是“立即调用”,使用自调匿名函数的好处在于这样不会产生任何全局变量。当然,这样的函数式无法重复执行的。这也使得匿名自调函数最适合于执行一些一次性的或初始化的任务。

内部(私有)函数

函数与其他类型的值,本质上是一样的,因此,没有什么理由可以阻止我们在一个函数内部定义另一个函数。

function a(param){
    function b(theinput){
        return theinput*2;
    }
    return 'The result is '+b(param);
}

返回函数的函数

函数始终都会有一个返回值,即便不是显示返回,它也会隐式返回一个undefined。既然函数能返回一个唯一值,那么这个值就也有可能是另一个函数:

function a(){
   alert('A!');
   return function(){
       alert('B!');
   };
}

 

posted on 2015-01-27 11:02  凡一二三  阅读(413)  评论(0编辑  收藏  举报