您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)JavaScript中回調(diào)函數(shù)的原理是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
JS回調(diào)函數(shù)
何為回調(diào)函數(shù),官方解釋:當程序跑起來時,一般情況下,應(yīng)用程序(application program)會時常通過API調(diào)用庫里所預(yù)先備好的函數(shù)。但是有些庫函數(shù)(library function)卻要求應(yīng)用先傳給它一個函數(shù),好在合適的時候調(diào)用,以完成目標任務(wù)。這個被傳入的、后又被調(diào)用的函數(shù)就稱為回調(diào)函數(shù)(callback function)。
通常將一個函數(shù)B傳入另一個函數(shù)A,并且在需要的時候再調(diào)用函數(shù)A。
說白了,回調(diào)就是回溯,先定義好將要使用的函數(shù)體,然后在使用使再調(diào)用這個函數(shù),我們通常把callback作為一個參數(shù)傳入先定義的那個函數(shù)。下面我們先來看一段jquery代碼:
$("p").hide(1000,function(){ alert("The paragraph is now hidden"); });
上面jquery就是一個回調(diào)函數(shù),首先它在執(zhí)行完hide效果后,接著調(diào)用function回調(diào)函數(shù)。
我們再來看一段JS代碼,看看回調(diào)函數(shù)是如何實現(xiàn)的:
function Buy(name,goods1,callback) { alert(name+' buy '+goods1); if(callback&&typeof(callback)==="function") callback(); } Buy('xiaoming','apple',function(){ alert("shopping finish"); });
一個很簡單的代碼,一開始不知道要買啥,等到買到東西,立即把之前定義好的函數(shù)調(diào)用出來,最好加上判斷規(guī)則,因為一切前提是callback必須是一個函數(shù),輸出結(jié)果為:
xiaoming buy apple
shopping finish
閉包與回調(diào)
下面看一道閉包的題目,分別點擊第一個和第四個節(jié)點,執(zhí)行結(jié)果:
var nodes = document.getElementsByTagName('button'); for (var i = 0; i < nodes.length; i++) { nodes[i].addEventListener('click', function() { console.log('You clicked element #' + i); }); }
這里雖然主要考的是閉包,addEventListener是一個閉包,而匿名函數(shù)是一個回調(diào)函數(shù),i是在閉包中的變量。在addEventListener的回調(diào)執(zhí)行時,循環(huán)已經(jīng)結(jié)束,此時的變量i被賦值為node.length,node.length為總節(jié)點數(shù)。所以結(jié)果就是
You clicked element # node.length
那要怎么改,將其返回值改成函數(shù),既然i變量的值會被釋放,那我們就引入i,讓每次循環(huán)的值都保存在內(nèi)存中,就可以了:
var nodes = document.getElementsByTagName('button'); for (var i = 0; i < nodes.length; i++) { (function(i) { nodes[i].addEventListener('click', function () { console.log('You clicked element #' + i); }) })(i); }
PHP回調(diào)函數(shù)
下面略說一下php中回調(diào)函數(shù)如何實現(xiàn)(結(jié)果為1,2,3,4):
<?php $array=array(1,2,3,4); array_walk($array,function($value){ echo $value;}); ?>
php對每個傳入的數(shù)組元素作回調(diào)處理,下面再看看php的閉包,使用use關(guān)鍵字繼承作用域外的變量:
<?php function getcouter(){ $i=0 return function() use($i)( echo $i; )}; } $counter=getcounter(); echo $counter(); echo $counter(); ?>
返回結(jié)果為:
1,1
1
官方php使用方法
class hello { function callback($a,$b) { echo "$a,$b"; } static function callback($c,$d){ echo "$c,$d"; } } //將類名作為參數(shù) call_user_func(array('hello','callback'),"hello","world"); //輸出 hello,world //將對象作為參數(shù) call_user_func(array(new hello(),'callback'),"hello","world"); //將靜態(tài)方法作為參數(shù) call_user_func(hello::callback,"hello","world"); //輸出 hello,world
1、能夠嵌入動態(tài)文本于HTML頁面。2、對瀏覽器事件做出響應(yīng)。3、讀寫HTML元素。4、在數(shù)據(jù)被提交到服務(wù)器之前驗證數(shù)據(jù)。5、檢測訪客的瀏覽器信息。6、控制cookies,包括創(chuàng)建和修改等。7、基于Node.js技術(shù)進行服務(wù)器端編程。
以上就是JavaScript中回調(diào)函數(shù)的原理是什么,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。