javascript学习中,经常会遇到闭包的问题,然后闭包的很多例子中又会遇到很多返回函数的闭包的例子程序。因为对闭包的理解还不够透彻,然后对于Functions rerurn a function产生了疑问。

  stackflow上有一个关于functions return a function的问题,参考https://stackoverflow.com/questions/7629891/functions-that-return-a-function

  然后测试过程中发现一些问题,先看一下下面的例子;

function a() {

        alert('A!');

        function b(){
alert('B!');
} return b();
} var s = a();
alert('break');
s();

这个程序的结果是

A!
B!
break

然后第二个程序是

function a() {

    alert('A!');

    function b(){
alert('B!');
} return b;
} var s = a();
alert('break');
s();

执行结果如下

A!
break
B!

这两个例子其实存在问题,但是不影响我们来理解返回函数。最简单直接的解释如下:

return b(); calls the function b(), and returns its result.

return b; returns a reference to the function b, which you can store in a variable to call later.

也就是说s = a():

如果a函数中返回的是b(),就会调用b函数,并且将b函数的返回结果赋值给变量s;(这个例子中由于b函数没有返回值,所以s的值是undefined)

如果a函数中返回的是b,会返回一个b函数的引用给变量s,你可以使用s()来调用该函数。


然后说一下,运行上面代码的过程中遇到的问题,对于第一个例子,在运行过程中,会报出TypeError的错误,原因是变量s并不是一个函数。非函数变量后面是不可以添加“()”的,否则程序会报错。如果在不清楚变量是否是函数的情况下,可以使用typeof s == 'function'来测试一下。

 

Functions that return a function的更多相关文章

  1. Adding New Functions to MySQL(User-Defined Function Interface UDF、Native Function)

    catalog . How to Add New Functions to MySQL . Features of the User-Defined Function Interface . User ...

  2. SQL Fundamentals || Single-Row Functions || 转换函数 Conversion function

    SQL Fundamentals || Oracle SQL语言   SQL Fundamentals: Using Single-Row Functions to Customize Output使 ...

  3. 利用return中断function

    想实现通过点击button实现文字样式的交替改变,在实现function的中断过程中遇到了一些问题,所幸解决了 <!doctype html> <html lang="en ...

  4. [SCSS] Write Custom Functions with the SCSS @function Directive

    Writing SCSS @functions is similar to writing functions in other programming languages; they can acc ...

  5. heading python decorator

    decorator make a wrapper function do something before and after the original function. The wrapper f ...

  6. 【JavaScript】使用面向对象的技术创建高级 Web 应用程序

    本文讨论: JavaScript 是基于原型的语言 用 JavaScript 进行面向对象的编程 JavaScript 编码技巧 JavaScript 的未来 本文使用了以下技术: JavaScrip ...

  7. javascript面向对象创建高级 Web 应用程序

       目录 JavaScript 对象是词典 JavaScript 函数是最棒的 构造函数而不是类 原型 静态属性和方法 闭包 模拟私有属性 从类继承 模拟命名空间 应当这样编写 JavaScript ...

  8. 使用面向对象技术创建高级 Web 应用程序

    作者: 出处: 使用面向对象技术创建高级 Web 应用程序 来源:开源中国社区 作者:oschina 最近,我面试了一位具有5年Web应用开发经验的软件开发人员.她有4年半的JavaScript编程经 ...

  9. Create Advanced Web Applications With Object-Oriented Techniques

    Create Advanced Web Applications With Object-Oriented Techniques Ray Djajadinata Recently I intervie ...

随机推荐

  1. How to recover destroyed ZFS storage pools

    root@sol11ai:~# zpool status tank   pool: tank state: ONLINE   scan: resilvered 91K in 0h0m with 0 e ...

  2. LAMP 2.7 Apache通过rewrite限制某个目录

    我们可以 allow 和 deny 去现在网站根目录下的某个子目录,当然这个 rewrite 也可以实现,配置如下: 创建一个目录和文件随便写些东西 mkdir /data/www/data/tmp ...

  3. 用JS,求斐波那契数列第n项的值

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. mybatis中in查询

    xml配置 : <select id="selectPostIn" resultType="dasyskjcdtblVo"> SELECT SYS_ ...

  5. springmvc 注解式开发 接收请求参数

    1.校正请求参数名: 2.以对象形式整体接收 3.路径变量:

  6. 关于c#分支语句和分支嵌套还有变量的作用域。

    分支语句: if....else if....else 必须以 if  开头 后面加括号写入需要判断的内容. 举个栗子说明一下 if (bool类型(比较表达式))  //  他会判断括号内的条件是否 ...

  7. SimpleDateFormat-多线程问题

    SimpleDateFormat-多线程问题: SimpleDateFormat类在多线程环境下中处理日期,极易出现日期转换错误的情况 import java.text.ParseException; ...

  8. gearman client的doBackground 与doNormal方法的区别

    doNormal方法是阻塞的,需要等到worker处理完之后才返回,否则一直阻塞住; doBackground 方法是非阻塞的,只要将数据发送到gearmand之后,就立马返回,不等待worker的处 ...

  9. 前端基础 之 CSS

    浏览目录 CSS介绍 CSS语法 CSS的几种引入方式 CSS选择器 CSS属性相关 一.CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览 ...

  10. zookeeper集群安装(转)

    转载地址:http://www.blogjava.net/hello-yun/archive/2012/05/03/377250.html 本方法,本人亲自试验,可以成功. ZooKeeper是一个分 ...