亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

傳一個函數當參數,兩種寫法的異同之處?

傳一個函數當參數,兩種寫法的異同之處?

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 關注
  • 582 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號