溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript中回調(diào)函數(shù)的原理是什么

發(fā)布時間:2021-05-12 17:11:58 來源:億速云 閱讀:317 作者:Leah 欄目:web開發(fā)

本篇文章給大家分享的是有關(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

JavaScript的作用是什么

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è)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(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)容。

AI