我pure function
对非常简单的例子的概念很好,比如......
function addTwo(val){
return val + 2;
}
给定相同的参数,它会产生相同的结果,从而导致参照透明度和良好的确定性代码。
但是后来我遇到了这样的例子(取自Frisby 教授,大部分是足够的指南,但我在其他 FP JS 书籍中找到了类似的例子)
//pure
var signUp = function(Db, Email, attrs) {
return function() {
var user = saveUser(Db, attrs);
welcomeUser(Email, user);
};
};
var saveUser = function(Db, attrs) {
...
};
var welcomeUser = function(Email, user) {
...
};
而且我不明白为什么不将对saveUser
or的调用视为外部依赖项(因此,不纯) welcomeUser
。
我知道从函数/IO 的角度来看,signUp
总是返回“相同”(等效)的有线函数,但我感觉很奇怪。
我很难理解为什么
function multiplyBy(times){
return value => value * times;
}
const fiveTimes = multiplyBy(5);
fiveTimes(10);
被认为是pure
。从返回的函数 POV 中,访问times
是对作用域链的查找,它可以来自直接外部作用域,也可以来自外部(如全局作用域)。
有人想为这件事带来一些启示吗?