首页 > 代码库 > 返回函数的函数
返回函数的函数
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
返回函数的函数