• javascript中return function与return function()的区别


    参考https://stackoverflow.com/questions/7629891/functions-that-return-a-function-javascript

    问题:唯一的区别是return中的函数是否带括号

    输入:

    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!

    回答1:

    Assigning a variable to a function (without the parenthesis) copies the reference to the function. Putting the parenthesis at the end of a function name, calls the function, returning the functions return value.

    http://jsfiddle.net/kaleb/Las6w/

    function a() {
        alert('A');// A未在此作用域定义
    }
    //alerts 'A', returns undefined
    
    function b() {
        alert('B');
        return a; //返回的是一个函数
    }
    //alerts 'B', returns function a
    
    function c() {
        alert('C');
        return a();//返回函数执行结果
    }
    //alerts 'C', alerts 'A', returns undefined
    
    alert("Function 'a' returns " + a());
    alert("Function 'b' returns " + b());
    alert("Function 'c' returns " + c());

    回答2:

    Returning the function name without () returns a reference to the function, which can be assigned as you've done with var s = a()s now contains a reference to the function b(), and calling s() is functionally equivalent to calling b().

    // Return a reference to the function b().
    // In your example, the reference is assigned to var s
    return b;

    Calling the function with () in a return statement executes the function, and returns whatever value was returned by the function. It is similar to calling var x = b();, but instead of assigning the return value of b() you are returning it from the calling function a(). If the function b() itself does not return a value, the call returns undefined after whatever other work is done by b().

        
    Returning the function name without () returns a reference to the function, which can be assigned as you've done with var s = a(). s now contains a reference to the function b(), and calling s() is functionally equivalent to calling b().
    
    // Return a reference to the function b().
    // In your example, the reference is assigned to var s
    return b;
    Calling the function with () in a return statement executes the function, and returns whatever value was returned by the function. It is similar to calling var x = b();, but instead of assigning the return value of b() you are returning it from the calling function a(). If the function b() itself does not return a value, the call returns undefined after whatever other work is done by b().
    
    // Execute function b() and return its value
    return b();
    // If b() has no return value, this is equivalent to calling b(), followed by
    // return undefined;

     回答3:

    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.

  • 相关阅读:
    重写方法,重载方法,虚方法和抽象方法的使用
    基类和派生类
    C#修饰符讲解大全
    通过HTTP请求WEBAPI的方式
    计算机各种协议讲解
    时间戳
    SQL Server知识详解
    基本概念和术语
    22.C++- 继承与组合,protected访问级别
    22.QT-QXmlStreamReader解析,QXmlStreamWriter写入
  • 原文地址:https://www.cnblogs.com/ys-wuhan/p/7026025.html
Copyright © 2020-2023  润新知