js回调函数的理解(轉)
生活随笔
收集整理的這篇文章主要介紹了
js回调函数的理解(轉)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
js回調函數(callback)理解Mark!講之前說一句function say(){alert(,,,,,,,,)}var say=function (){alert(,,,,,,,)}var say=()=>{alert(,,,,,,,)}他們3個是一模一樣的 只是寫法不一樣
一個是普通方法 另一個是匿名函數 一個是箭頭函數js學習不喜歡js,但是喜歡jquery,不解釋。自學jquery的時候,看到一英文詞(Callback),頓時背部隱隱冒冷汗。迅速google之,發現原來中文翻譯成回調。也就是回調函數了。不懂啊,于是在google回調函數,發現網上的中文解釋實在是太“深奧”了,我承認自己才疏學淺了。看了幾個回調的例子后,貌似有點理解了。下面是我對回調函數的理解,要是理解錯了,請指正,不甚感激。首先還是從jquery網站上的英文定義入手,身為國人,我真感到悲劇。一個回調的定義被國內的“高手”解釋成什么樣,就在那繞圈子,貌似只有把你繞進去了,他才算高手。浮云,一切都是浮云。A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.這是js里的解釋了,其他語言的算我沒說。字面上理解下來就是,回調就是一個函數的調用過程。那么就從理解這個調用過程開始吧。函數a有一個參數,這個參數是個函數b,當函數a執行完以后執行函數b。那么這個過程就叫回調。其實中文也很好理解:回調,回調,就是回頭調用的意思。函數a的事先干完,回頭再調用函數b。舉個現實的例子:約會結束后你送你女朋友回家,離別時,你肯定會說:“到家了給我發條信息,我很擔心你。”對不,然后你女朋友回家以后還真給你發了條信息。小伙子,你有戲了。其實這就是一個回調的過程。你留了個函數b(要求女朋友給你發條信息)給你女朋友,然后你女朋友回家,回家的動作是函數a。她必須先回到家以后,函數a的內容執行完了,再執行函數b,然后你就收到一條信息了。這里必須清楚一點:函數b是你以參數形式傳給函數a的,那么函數b就叫回調函數。也許有人有疑問了:一定要以參數形式傳過去嗎,我不可以直接在函數a里面調用函數b嗎?確實可以。求解中。<解惑:如果你直接在函數a里調用的話,那么這個回調函數就被限制死了。但是使用函數做參數就有下面的好處:當你a(b)的時候函數b就成了回調函數,而你還可以a(c)這個時候,函數c就成了回調函數。如果你寫成了function a(){...;b();}就失去了變量的靈活性。>
?
下面用代碼[1]來證實我的理解。 <html> <head> <title>回調函數(callback)</title> <script language="javascript" type="text/javascript"> function a(callback) { alert("我是parent函數a!"); alert("調用回調函數"); callback(); } function b(){ alert("我是回調函數b"); } function c(){ alert("我是回調函數c"); } function test() { a(b); a(c); } </script> </head> <body> <h1>學習js回調函數</h1> <button onClick=test()>click me</button> <p>應該能看到調用了兩個回調函數</p> </body> </html> 針對javascript回調函數傳參數的簡單實例問題:現在有函數如下定義: function A(a,callback){ .... } function B(){ .... } 則可以有如下調用 A(a,B);來實現回調。現在我希望傳給B一個參數c,即實現類似于:A(a,B(c));的效果,各位高手幫幫忙,應該如何實現?下面的解答來自[2]:
<html> <head> <title> jsp3 </title> </head> <body bgcolor="#ffffff"> <script language="javascript" type="text/javascript"> function A(a,callback){ var b=callback; alert(a+b); } function B(c){ return (-c); } </script> <form method="post" action="jsp3.jsp"> <br><br> <input type="button" name="Submit" value="Submit" onclick="A(4,B(3));"> </form> </body> </html>#####################################################################################
我包裝了jQuery的ajax方法 function doAjax(u,param,callback){$.ajax({type:'POST',url:u,data:param,success:callback}); }function showAlert(data){alert(data); }比如這樣調用 doAjax("server.php","id=12&type=1",showAlert); $.ajax 在success后, 會返回一個data到showAlert中,顯示出來 ,沒有問題.可是,當我想多傳一個參數給showAlert時怎么寫? 寫成doAjax("server.php","id=12&type=1",showAlert("hi",data))、 或者把上面的success:callback 寫成success:callback(msg,data) 顯然都不行,如之奈何?求助~簡單,很多方法都定義了回調函數,回調函數也是函數,就是說不管怎么傳,只需要是個函數類型即可。寫法如下。?
方式1, doAjax(參數1,參數2,function(request,opts){callback(request,opts,agrs);}); function callback(request,opts,args){}; 方式2, 方式2, var args=N; doAjax(參數1,參數2,function(request,opts){var X=N;回調函數代碼塊..和以上幾乎一樣,看個人編碼方式選擇。 });?
.描述filter 為數組中的每個元素調用一次 callback 函數,并利用所有使得 callback 返回 true 或 等價于 true 的值 的元素創建一個新數組。*filter 方法示例 //排除掉小于10的值 var isBigEnough=(element)=> {return element >= 10; } var filtered = [12, 5, 8, 130, 44].filter(isBigEnough); // filtered is [12, 130, 44]?
Reference:
[1]http://luxiao1223.blog.51cto.com/2369118/482885
[2]http://blog.sina.com.cn/s/blog_4bb52a160100da4w.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的js回调函数的理解(轉)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fatal: unable to acc
- 下一篇: datagrip导入csv数据配合aja