返回函数的函数

By | 11月07日
Advertisement

我们先看这样一个例子:

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、函数名不能以数字开头,可以由任意的字母、数字和下划线组合而成。

本文出自 “平凡女之行” 博客,请务必保留此出处

Similar Posts:

  • 提高篇 返回指针的函数

    1.返回指针的函数 类型标识符 *函数名(形式参数表列) 例: //求俩数最大值 #include <stdio.h> int max(int x,int y) { int t; if(x>y) t=x; else t=y; return t; } int main() { int a,b,c; scanf("%d %d",&a,&b); c=max(a,b); printf("max=%d\n",c); return 0; } 这

  • C++中为什么不允许通过返回类型重载函数的辩论

    2004-07-05 13:25:31 别逗了 问个问题: 1.C++中为什么不允许通过返回类型重载函数? 2.为什么不允许通过返回类型解析模板函数? 2004-07-05 14:47:55 完美废人 返回类型是一种可有可无的东西-- 2004-07-05 16:41:23 完美废人 瞧见什么叫高手了吧 2004-07-05 18:32:46 别逗了 那operator type()怎么说?不是根据返回值判断调用那个函数的吗? 2004-07-05 18:34:49 完美废人 void f();

  • C++基础---有返回值类型函数(返回引用类型)

    1. C++基础-有返回值类型函数(返回引用类型) 1.1 引用的定义 引用就是某个目标变量的"别名"(alias),对引用的操作与对变量直接操作效果完全相同. 申明一个引用的时候,切记要对其进行初始化.引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不可以把该引用名作为其他变量名的别名. 代码示例: (1)会调用拷贝构造函数和析构函数 A a(){...;return *this;} (2)不会调用拷贝构造函数和析构函数 A& a(){...;return

  • js匿名函数作为函数参数 (返回值作为另一个函数的参数)

    NodeJS 以事件响应的形式返回结果大家都知道的,所以有时候不能直接返回值给函数调用,那就需要在事件响应后把结果返回,于是就用到了匿名函数作为函数参数 (也可以理解为返回值作为另一个函数的参数). 代码,以前一般做法: function a() { var result = b(); document.write(result); } function b() { var a=123; return a; } 但是如果本身 function b() 里面就嵌套一个事件响应,想把响应的结果返回就

  • 编写1个函数. 该函数返回1个整型数组中的最大值、最小值、平均值、累积和.

    // // main.c // Created by LongMa on 15/8/11. // Copyright (c) 2015年 itcast. All rights reserved. //5. 请编写1个函数. 该函数返回1个整型数组中的最大值.最小值.平均值.累积和. #include <stdio.h> void multifunction(int*a, int len ,int*min, int* max, float*avg, int* sum) { for (int i

  • 返回指针的函数与指向函数的指针的用法

    返回指针的函数与指向函数的指针的用法 #include<stdio.h> #include<stdlib.h> void *func(){ /* * 一种很容易犯的错误,将局部变量的地址返回 */ int m; printf("define as void *func()/n"); return &m; } /* * 声明一个指向函数的指针,指向返回类型为void指针的函数 */ void *(*pfunc)(); /* void (*pfun)();

  • C++中函数的返回值作为函数的参数学习笔记

    函数的返回值作为函数的参数使用: #include <iostream> int test(int x,int y); /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; int main(int argc, char** argv) { int x=5,y=6; //函数的返回值作为

  • 函数深入理解---返回值为函数

    返回值为函数 function fn1(arg){ //此时返回的是一个函数对象 var rel = function(num){ return arg + num; } return rel; //直接返回一个可以调用的函数 } //此时f是一个函数对象,可以完成调用 var f = fn1(20); console.log(f(20)); console.log(f(11)); ps.sort(sortByProperty('age')); function sortByProperty(p

  • 点滴知识01-----能够返回数组的函数

    一个可以返回数组的函数编写: #include <iostream> #include <string> using namespace std; int *ABC(int c,int d,int w) { int *a=new int[3]; a[0] = c; a[1] = d; a[2] = w; return a; // before this statement, no delete []a! } int main() { int *b = new int[3]; b =

  • Python返回函数_函数闭包_lambda匿名函数

    闭包 在函数内部定义的函数和外部定义的函数是一样的,只是他们无法被外部访问: def g(): print 'g()...' def f(): print 'f()...' return g 将 g 的定义移入函数 f 内部,防止其他代码调用 g: def f(): print 'f()...' def g(): print 'g()...' return g 但是,考察上一小节定义的 calc_sum 函数: def calc_sum(lst): def lazy_sum(): return

Tags: