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

标签 javascript functional-programming return-value methodology

我编写 JavaScript 代码并尝试使用它的函数式语言特性。

在其他函数式语言中(甚至在 Ruby 中),如果我没有显式设置函数的返回值,它将返回最后计算的表达式的值。 JavaScript 不遵循这种模式。 (准确地说,JavaScript 也始终返回一个值。如果未设置任何值,则为 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 将返回生成的对象。

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

稍后我可能会写:

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

    // return public methods
    return {
        // ...
    }
};

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

最佳答案

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

关于javascript - 我应该总是给我的函数一个返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/903120/

相关文章:

javascript - 如何使用 NodeJS 上的 GraphicsMagick 提取 GIF 的第一帧并将其保存为 PNG?

Javascript DIV 样式高度(IE 和 FF)与 jQuery

function - Scala 函数文字中的 `return`

javascript - 如何实现 f(g) == g(f)

Python 列表理解。通过重复调用函数直到返回预定义值来生成列表

javascript - 使用 Javascript 更改滚动图像

javascript - Highcharts 极坐标图 - 中心为零

lambda - 在 Java8 中使用 Lambda 表达式对映射进行排序

c - 了解有关 c 中退出函数的一行

javascript - 为什么对象方法不返回值?