首页 > 代码库 > 返回函数的函数

返回函数的函数

我们先看这样一个例子:

function a(){

              alert("A");

              return function b(){//此时返回函数function(){alert(‘B‘);}

                            alert(‘B‘);

              }

}             

这是一个返回函数的函数,那么,这段代码第一次执行的时候,结果应该是什么呢?接着再执行一次的结果又是什么呢?

首先,我们分析下这段代码:

1     这段代码是一个函数,函数名是a,没有参数;

2     在这个函数的内部还有一个函数,函数名是b。在函数b里还有一个return语句,return的是一个函数。

 

这个时候我们需要了解一个概念:即函数是一种数据类型。这个概念对我们理解这段代码很重要。

既然函数一种数据类型,那么函数可以如变量一样进行定义、删除、拷贝、甚至是作为另一个函数的参数来传递。

如果只是把上面的代码函数a放在一段正在执行中的代码,这段代码也是不运行的,为什么呢?

这是因为:没有调用这段代码即函数a的语句,只是在这里定义了函数a是一个什么样的函数。

要想执行函数a中的代码就必须要加这样一个语句:a();调用函数a; 如果函数有参数,那么括号里就是要传递给参数的值。

 

那么,上面这代码第一次执行结果是:

1     alert("A"); 弹出一个弹出框,内容是A

2     返回函数b给函数a

注:代码虽然执行,但是我们看不到明显效果,只有在函数再执行一次,执行了函数b里的alert语句才能看到,你可以把函数b想成一个普通变量一样,只是把它返给函数a,至于函数b里的东西先不管它。

接着,我们想让函数再执行一次,可以这样操作:

var newf=a();   //只是把函数b返回给函数a,但此时函数b并没有被调用。

nexf();   //调用函数b,执行函数b中的语句。

这时可以得到结果:

   alert(‘B‘); 弹出一个弹出框,内容是B

 

   其实这里,如果你想让返回的函数立即执行,也可以不用将它赋值给变量,直接在该调用之后再加一对括号即可,效果是一样的。

a()();


补充:

1、函数是一种数据类型。

     javascript中的函数是一种数据,这种特殊的数据类型有两个重要的特性:

     @ 它们所包含的是代码

     @ 它们是可执行的(或者说是可调用的)

2、函数可以如变量一样进行定义、删除、拷贝、甚至是作为另一个函数的参数来传递。

3、函数名不能以数字开头,可以由任意的字母、数字和下划线组合而成。



本文出自 “平凡女之行” 博客,请务必保留此出处http://jones.blog.51cto.com/9565009/1574008

返回函数的函数