JavaScript回调和功能编程

| “功能编程仅描述要在程序输入上执行的操作,而不使用临时变量来存储中间结果。” 问题是如何应用函数式编程,又如何使用利用回调的异步模块。 在某些情况下,您希望回调函数访问一个变量,该变量将调用异步引用的函数构成,但是已经定义了回调函数的签名。 例:
function printSum(file,a){
     //var fs =....
     var c = a+b;
     fs.readFile(file,function cb(err,result){
          print(a+result);///but wait, I can\'t access a......
     });
}
当然我可以访问a,但这将违反纯函数式编程范例     
已邀请:
        
fs.readFile(file, (function cb(err,result){
    print(this.a+result);
}).bind({a: a});
如有必要,只需将带有变量和作用域的“ 2”注入到函数中。 因为您抱怨API
fs.readFile(file, (function cb(a, err,result){
    print(a+result);
}).bind(null, a);
叫做咖喱。这是更多的FP。     
        我认为问题在于您误解了使用中间值的含义(或者他们误解了它,我没有阅读链接)。考虑功能语言中的变量是某物的“ 4”,并且定义不能更改。只要名称不更改,就可以在函数式编程中为名称/公式使用名称。
function calculate(a,b,c) {
    // here we define an name to (a+b) so that we can use it later
    // there\'s nothing wrong with this \"functionally\", since we don\'t 
    // change it\'s definition later
    d = a + b;
    return c * d;
}
另一方面,从功能上讲,以下操作不可行
function sum(listofvalues) {
    sum = 0;
    foreach value in listofvalues
        // this is bad, since we\'re re-defining \"sum\"
        sum += value;
    return sum
}
为了更接近代码中的内容,请考虑您有一个函数调用ѭ7     
        
function printSum(file, a) {
     //var fs =....
     var c = a + b;
     fs.readFile(file, function cb(err, result, aa = a) {
          print(aa + result);
     });
}
如今,使用默认参数,可以将a传递到回调中。     

要回复问题请先登录注册