微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript回调和功能编程

如何解决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传递到回调中。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。