javascript回呼函數

來源:互聯網
上載者:User

標籤:執行   包含   pac   and   dom   border   keyword   參數傳遞   返回   

函數也是對象

  想弄明白回呼函數,首先的清楚地明白函數的規則。在javascript中,函數是比較奇怪的,但它確確實實是對象。確切地說,函數是用Function()建構函式建立的Function對象。Function對象包含一個字串,字串包含函數的javascript代碼。假如你是從C語言或者java語言轉過來的,這也許看起來很奇怪,代碼怎麼可能是字串?但是對於javascript來說,這很平常。資料和代碼之間的區別是很模糊的。

123 //可以這樣建立函數var fn = new Function("arg1", "arg2", "return arg1 * arg2;");fn(2, 3); //6

  這樣做的一個好處,可以傳遞代碼給其他函數,也可以傳遞正則變數或者對象(因為代碼字面上只是對象而已)。

傳遞函數作為回調

  很容易把一個函數作為參數傳遞。

12345678 function fn(arg1, arg2, callback){ var num = Math.ceil(Math.random() * (arg1 - arg2) + arg2); callback(num);  //傳遞結果} fn(10, 20, function(num){ console.log("Callback called! Num: " + num); });    //結果為10和20之間的隨機數

  可能這樣做看起比較麻煩,甚至有點愚蠢,為何不正常地返回結果?但是當遇上必須使用回呼函數之時,你也許就不這樣認為了!

     那看看下面的樣本:

12345678910 function foo(){ var a = 10; return function(){  a *= 2;  return a;   }; }var f = foo();f(); //return 20.f(); //return 40.

  函數在外部調用,依然可以訪問變數a。這都是因為javascript中的範圍是詞法性的。函數式運行在定義它們的範圍中(上述例子中的foo內部的範圍),而不是運行此函數的範圍中。只要f被定義在foo中,它就可以訪問foo中定義的所有的變數,即便是foo的執行已經結束。因為它的範圍會被儲存下來,但也只有返回的那個函數才可以訪問這個儲存下來的範圍。返回一個內嵌匿名函數是建立閉包最常用的手段。

 回調是什嗎?

使用回呼函數實際上就是在調用某個函數(通常是API函數)時,將自己的一個函數(這個函數為回呼函數)的地址作為參數傳遞給那個函數。而那個函數在需要的時候,利用傳遞的地址調用回呼函數,這時你可以利用這個機會在回呼函數中處理訊息或完成一定的操作。
—— 某專家
回呼函數,就是由你自己寫的。你需要調用另外一個函數,而這個函數的其中一個參數,就是你的這個回呼函數名。這樣,系統在必要的時候,就會調用你寫的回呼函數,這樣你就可以在回呼函數裡完成你要做的事。
—— 綠葉

javascript回呼函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.