zoukankan      html  css  js  c++  java
  • 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'来测试一下。

     

  • 相关阅读:
    Spring-Context之四:Spring容器及bean的定义
    Spring-Context之三:使用XML和Groovy DSL配置Bean
    Spring-Context之二:使用Spring提供的测试框架进行测试
    Spring-Context之一:一个简单的例子
    ActiveMQ第五弹:增加ReDelivery功能
    百度云+ KeePass 网络同步你的密码
    git生成秘钥之后同步到服务器
    谷歌chrome浏览器和火狐firefox浏览器自带http抓包工具和请求模拟插件
    ltnmp
    CentOS 下安装xdebug
  • 原文地址:https://www.cnblogs.com/Jamie1032797633/p/9340186.html
Copyright © 2011-2022 走看看