猿问

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

一般来说,把一个函数当参数传进去都是这样写的

    $('#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()

希望有老司机带我一波。。。


ABOUTYOU
浏览 566回答 1
1回答

慕后森

是不是在一个参数的位置声明了一个非匿名函数,在参数外也可以调用?答案:不是。function&nbsp;fn1(cb){ &nbsp;&nbsp;&nbsp;&nbsp;cb() } fn1(function&nbsp;fn2(){&nbsp;&nbsp;&nbsp;&nbsp;/*code*/}); fn2();&nbsp;&nbsp;//&nbsp;Uncaught&nbsp;ReferenceError:&nbsp;fn2&nbsp;is&nbsp;not&nbsp;defined(…)这样的写法其实差异性不太大,我个人觉得写成命名函数(fn2)比匿名函数多一个功能,在命名函数(fn2)内部可以通过fn2访问该函数,比如你需要递归的时候可以用到。var&nbsp;i&nbsp;=&nbsp;1;function&nbsp;fn1(cb){ &nbsp;&nbsp;&nbsp;&nbsp;cb() } fn1(function&nbsp;fn2(){&nbsp;&nbsp;&nbsp;&nbsp;console.log(i);&nbsp;&nbsp;&nbsp;&nbsp;if(i&nbsp;<&nbsp;5)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;递归 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn2(); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &nbsp;&nbsp;&nbsp;&nbsp;} });
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答