首先從callback的字面翻譯「回呼」 可以理解這是一個函數被調用的機制
#當我們遇到一個名詞首先可能是百度谷歌搜尋看官方是怎麼解釋的
下面是維基百科對回呼的定義:
a callback is a piece of executable code that is passed as an argument to other code which is expected to call back (execute) the argument at some convenient time
硬翻譯: 一個回呼函數是作為另一個函數的參數的一個可執行的程式碼段這個程式碼段在方便的時間來執行
通俗形象的解釋: 把函數f2當作一個參數傳給函數f1 並且在f1裡適當的時間執行f2(下面的所有例子我都用f1,f2表示)
所以我們可以得到一個這樣的回調函數模式
function f1(f2) { //f1要执行的一些代码 if (f2 && typeof(f2) === "function") { //对f2做判断是否存在并且是一个函数 f2(); } }
這裡要注意兩點參數裡的f2是一個指向f2這個函數的指標所以f2後面不能加括號
而f1內部的f2後面要有括號因為這時我們要呼叫執行f2 ,所以要寫f2()
我們把這個模式實例化看下他的執行結果
声明函数function f1(f2) { alert("我是f1");if (f2 && typeof(f2) === "function") { //写上判断是个好习惯f2() } } 执行 f1(function() { alert("我是f2"); }) 结果://"我是f1",“我是f2”
我們看下整個函數執行的過程 當呼叫f1(function(){alert("我是f2 ");})的時候
先把一個匿名函數傳給了f1() 而這個匿名函數就是宣告函數裡的參數f2 javascript程式是從上到下執行先執行了alert("我是f1"); 然後執行了f2();
那我們可不可以這樣寫呢
function f1(f2) { alert("我是f1"); if (f2 && typeof(f2) === "function") { f2() } alert("我又是f1 哈哈"); } 执行 f1(function(){ alert("我是f2"); })//结果:我是f1 ,我是f2,我又是1 哈哈
再看對callback的定義,我們可以讓callback在我們想要執行的時候執行,不影響f1本身的執行流
但為了封裝和美觀大多數我們會這樣寫
function f1(f2){ if (f2 && typeof(f2) === "function") { settimeOut(function(){f2()},1000) ;//f1执行1s后f2执行} }function f2(){/**/} f1(f2);
其實回呼函數沒那麼複雜的,在js裡面,function你可以當成一個普通的參數。只要後面加上(),就表示呼叫這個函數了。
再看看下面這個例子
$(function(){ function funcname(param){ //do something //callback param.callback(); } //调用 funcname({ callback:function(){ alert('callback do'); } }); });
從上面的例子也可以看出來,其實每定義一個函數,都會將函數入容器的棧,index就是函數名。預設是在window下,因此可以把字串丟過去,在window下也可以透過字串呼叫到這個回呼函數。
帶參數的話,可以採用上面的方式。
例如jQuery裡的一個例子
$("#div1").fadeOut("fast",functin(){ $("#div2").fadeIn("slow"); })
讓#div快速隱藏然後讓#div2漸漸顯示,在jQuery裡有大量的callback函數
並且有一個專門的有一個方法callbacks來管理
jQuery.Callbacks = function( options ) {...}
最後我說下我最近在專案中用到的callback吧
hybrid app 功能大概就是我向ios發送一個請求ios返回給我的json資料然後我將返回的資料解析插入到web頁面上
//首先我写一个javascript和ios通信callback函数(简化)getData(callback){ settimeOut(function(){callback(iso_return)},100); }//然后我向ios发送一个请求function getSinersReuest(){window.location.href="vvmusic://....callback=getSinersData"}/*然后ios截获url中的callback执行getData(getSinersData)返回给我数据;我的getSinersData是我想把ios返回的json插入到页面显示8*/getSinersData(iso_return){ ......... }//当页面加载的时候调用window.onload=function(){ getSinersReuest(); }
以上是jQuery如何自訂一個回呼函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。

去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)