JS 對於回呼函數的理解,和常見的使用情境應用,使用注意點

來源:互聯網
上載者:User


很經常我們會遇到這樣一種情況:

例如,你需要和其他人合作,別人提供資料,而你不需要關注別人擷取或者構建資料的方式方法。

你只要對這個拿到的資料進行操作。

這樣,就相當於我們提供一個外在的函數,別人調用這個函數,返回相應的資料。


例如:

function (num , numFun) {if(num < 10){//do sth}else {//do sthnumFun();}}

在num的判斷之後執行NumFun的函數。


所謂的回呼函數,可以這樣理解,它是為了實現這樣一個目的:

draw方法是一個繪圖的函數

現在我們調用這個draw方法,希望在圖形繪製完成之後,我們能夠進行相應的操作,為了保證這個操作是在繪圖完成之後調用的。

我們就採取這樣一種方法,將fun作為參數傳遞進draw,然後再draw函數執行完成之後,調用這個傳遞的fun方法


function draw(beforeDraw, afterDraw) {beforeDraw();//繪圖//dosthafterDraw();}//別人調用draw(function(){alert('繪圖之前執行');//繪圖之前,do sth},function(){alert('繪圖之後執行');//繪圖之後,do sth})

當然利用這種思想,我們可以在很多地方有很巧妙的使用:

比如之前舉得例子

你只關注資料的返回值,不關注別人調用這個方法是怎麼操作的。

方法1:

就可以利用回呼函數的思想,定義方法傳入的參數為函數,別人調用是,在函數參數中執行相應的操作,然後返回你所需要的值:

var drawBase = {init : function (getdata){  var mydata = getdata(); $('#testID').bind('click', function(e){  //利用mydata進行繪圖操作})},}

//別人在調用你這個函數時候,傳入的參數為函數,函數中進行操作後返回相應的值


drawBase.init(function () {//do sth一系列操作之後return data;})

方法2、

你也可以,先定義一個空方法,然後別人再去重寫這個方法,進行一系列的操作之後,返回相應的資料

然後我們使用時候,就可以拿到這個返回的資料了:

Exp:

var drawBase = {getdata = { },init : function () {$('testID').bind('click', function () {  var data = drawBase.getdata();//使用data進行你所需要的操作})}}


//別人調用時候,就需要重寫這個方法

drawBase.getData = function () {   //一系列操作,得到data, return data;}


這兩種方法可以這樣理解:

方法一,綁定事件和操作,是在別人調用時候才做的,因此那個時候getdata()的方法是已知的可以直接綁定

方法二,綁定的事件和操作,是之前進行的,此時不知道getdata()的方法,因而給定一個空的方法定義,在別人調用重寫後,就可以拿到相應的資料


這個是我個人的一些看法~


Exp:

var stu={    init : function(callback){        //TODO ...        if(callback && (callback  instanceof Function){              callback('init...');//回調        }    }};


別人調用,傳入函數參數:
stu.init(function(){     //這就是回調了...});


加油!







相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.