代码之家  ›  专栏  ›  技术社区  ›  viam0Zah

我应该总是给我的函数一个返回值吗?

  •  11
  • viam0Zah  · 技术社区  · 17 年前

    undefined .)

    我的问题是:我有一个不需要(也不需要)返回值的函数。在函数编程上下文中,函数没有显式返回值有意义吗?或者如果我发现自己在这件事上失败了?

    LIB_hashManager = function(f, context) {
        var prev = '';
        var pollHash = function() {
            if (prev !== window.location.hash) {
                prev = window.location.hash;
                f.apply(context);
            }
        };
        window.setInterval(pollHash, 100);
    };
    

    我应该返回这里吗?

    LIB_hashManager 将返回生成的对象。

    LIB_hashManager = function(f, context) {
        // inside logic
        // ...
    };
    

    LIB_hashManager = function(f, context) {
        // inside logic
        // ...
    
        // return public methods
        return {
            // ...
        }
    };
    

    那么在第一种情况下返回一个空对象就没有意义了?

    6 回复  |  直到 17 年前
        1
  •  20
  •   Alex Martelli    17 年前

    “纯”函数式编程环境不会有任何副作用——每个函数的工作都是 完全 在计算其回报值时;这在Javascript的典型使用中并不可行,因此当函数通过副作用完成其工作时,让它完全不返回任何内容是完全可以接受的,也就是说,它是一个“过程”而不是一个函数。

        2
  •  5
  •   Unknown    17 年前

    我的问题是:我有一个不需要(也不需要)返回值的函数。在函数编程上下文中,函数没有显式返回值有意义吗?或者如果我发现自己在这件事上失败了?

    根据函数的学术描述:函数必须给出与输入相同的输出。没有任何输出的函数是绝对无用的,因为函数不应该有任何副作用。

    然而,由于函数式编程语言通常至少需要一个副作用,所以不返回任何内容的约定是返回一个单元或“()”。因为Javascript中不存在这个概念,所以它对您来说并不重要,因为Javascript不是强类型的。

        3
  •  2
  •   onedozenbagels    17 年前

    拥有一个不返回任何内容的函数是非常好的。事实上,强制一个自然不会有返回值的函数有一个返回值是很尴尬的 难闻 .

        4
  •  1
  •   Thevs    17 年前

    只产生副作用的函数可以简单地视为一个独立的程序块,与过程块相同。因为JS没有过程,所以将函数用作过程块并没有错。唯一的例外是JS中的函数也是对象,所以要注意广泛使用此类“函数”。

    在这种情况下,它只是增加了程序的可读性。

        5
  •  1
  •   c69    12 年前

    这个问题已经在4年前得到了回答,但我相信,人们接受的答案是 错误的


    在给出的代码中,作者设置了间隔,然后-他没有提供任何方法来停止它。

    因此答案应该是: 是的,您应该从此函数返回一个值 ,该值应该是一个允许您停止间隔的对象,该间隔在间隔内启动。

    讨论细节 怎样 如果超出范围,则应执行此操作。//您可以通过返回interval handler来执行此操作,这样您就可以手动取消它(请参见示例1),或者通过使用在场景后面执行此操作的方法(如smth)返回对象来执行此操作 .pause .stop .cancel )。或者,该对象还可以允许运行时重新配置哈希管理器(如更改间隔频率)。

    LIB_hashManager = function(f, context) {
        var prev = '';
        var pollHash = function() {
            if (prev !== window.location.hash) {
                prev = window.location.hash;
                f.apply(context);
            }
        };
        return window.setInterval(pollHash, 100);
    };
    
        6
  •  0
  •   Jonas    17 年前

    LIB_hashManager 我想你一定要回来 undefined (即,根本没有返回语句)。

    如果您忘记了这一点,并尝试使用函数的结果,您可能只会得到一个错误(这很好,因为这将是一个编程错误,一个bug!)