为了账号安全,请及时绑定邮箱和手机立即绑定

传一个函数当参数,两种写法的异同之处?

传一个函数当参数,两种写法的异同之处?

ABOUTYOU 2018-09-03 14:11:08
一般来说,把一个函数当参数传进去都是这样写的    $('#xx').append(function(){        /*some code*/         return xxx     })但是最近看vue的源码的时候,发现有这样的写法:是我孤陋寡闻,感觉这种写法真的很少见。 因为我一直以为    //定义     function fn(cb){         cb()     }         //调用     fn(function(){        /*some Code*/     });         /*这个相当于cb=function(){}*/     /*然后cb()*/不知道这种理解对不对传匿名函数和传非匿名函数有什么异同呢?是不是在一个参数的位置声明了一个非匿名函数,在参数外也可以调用?就比如:function fn1(cb){     cb() } fn1(function fn2(){    /*code*/}); fn2()希望有老司机带我一波。。。
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

是不是在一个参数的位置声明了一个非匿名函数,在参数外也可以调用?

答案:不是。

function fn1(cb){
    cb()
}
fn1(function fn2(){    /*code*/});

fn2();  // Uncaught ReferenceError: fn2 is not defined(…)

这样的写法其实差异性不太大,我个人觉得写成命名函数(fn2)比匿名函数多一个功能,在命名函数(fn2)内部可以通过fn2访问该函数,比如你需要递归的时候可以用到。

var i = 1;function fn1(cb){
    cb()
}
fn1(function fn2(){    console.log(i);    if(i < 5) {
        i++;        // 递归
        fn2();
    } else {        return
    }
});


查看完整回答
反对 回复 2018-10-13
  • 1 回答
  • 0 关注
  • 565 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信