回调函数的问题

  1. function tes(){
        var c=1;
        yui(c)
    }
    function yui(n){
        console.log(n)
    }
    tes()
  2. function tes(a){
        var c=1;
        a(c)
    }
    function yui(n){
        console.log(n)
    }
    tes(yui)

求教一下大神们第一种方法和第二种回调函数的方法结果都一样。第一种方法跟第二种回调函数有什么区别吗?请解释一下。。

阅读 2.5k
3 个回答
function tes(){
    var c=1;
    yui(c)   //传递c的变量值
}
function yui(n){
    console.log(n)  // n = c = 1; 输出为1
}
tes()  //调用tes函数


function tes(a){  //传入参数为函数 `ƒ yui(n){console.log(n)}`
    var c=1;
    a(c)  //调用函数a(c) = a(1) = yui(1)
}
function yui(n){  //函数yui
    console.log(n)
}
tes(yui)  //调用tes 传递yui函数

第二种方式更像我们现在提倡的函数式编程,将函数作为参数传递,正如你说的结果都一样。

正如楼上所述,第二种属于提倡的函数式编程的一方面
在本例中,相对于第一种,区别或者好处在于以下三点:
1、两个函数可以作为独立的函数使用,不需要依赖外部变量或者条件,在第一种中,tes必须依赖于yui
2、函数作为参数,突破一直以来的思维限制,带来更多的灵活性
3、因为函数独立,更容易“语义化”,比如本例中,tes可以改成handleC,yui改成log -> handleC(log) -> 把C打印出来。(这里有点稍微有点牵强,但可以往这方向去理解~)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏