我编写 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/