Functions that return a function

  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'来测试一下。

 

 

 

posted @ 2018-07-20 10:40  Jamie0327  阅读(176)  评论(0编辑  收藏  举报
levels of contents