在 js 開發中,由於沒有多線程,經常會遇到回調這個概念,比如說,在 ready 函數中註冊回調函數,註冊元素的事件處理等等。在比較複雜的場景下,當一個事件發生的時候,可能需要同時執行多個回呼方法,可以直接考慮到的實作就是實作一個佇列,將所有事件觸發時需要回呼的函數都加入到這個佇列中保存起來,當事件觸發的時候,從這個佇列重依序取出已儲存的函數並執行。
概述
$(document).ready()的簡寫。
允許你綁定一個在DOM文件載入完成後執行的函數。這個函數的作用如同$(document).ready()一樣,只不過用這個函數時,需要把頁面中所有需要在 DOM 載入完成時執行的$()運算子都包裝到其中。從技術上來說,這個函數是可連結的——但真正以這種方式連結的情況並不多。 你可以在一個頁面中使用任多個$(document).ready事件。參考 ready(Function) 以取得更多 ready 事件的資訊。
參數
callbackFunctionV1.0
當DOM載入完成後要執行的函數
可以如下簡單的實作。
首先,實作一個類別函數來表示這個回呼類別。在 javascript 中,使用陣列來表示這個佇列。
function Callbacks() { this.list = []; }
然後,透過原型實作類別中的方法。增加和刪除的函數都保存在陣列中,fire 的時候,可以提供參數,這個參數將會被傳遞給每個回呼函數。
Callbacks.prototype = { add: function(fn) { this.list.push(fn); }, remove: function(fn){ var position = this.list.indexOf(fn); if( position >=0){ this.list.splice(position, 1); } }, fire: function(args){ for(var i=0; i<this.list.length; i++){ var fn = this.list[i]; fn(args); } } };
測試程式碼如下:
function fn1(args){ console.log("fn1: " + args); } function fn2(args){ console.log("fn2: " + args); } var callbacks = new Callbacks(); callbacks.add(fn1); callbacks.fire("Alice"); callbacks.add(fn2); callbacks.fire("Tom"); callbacks.remove(fn1); callbacks.fire("Grace");
或者,不使用原型,直接透過閉包來實現。
function Callbacks() { var list = []; return { add: function(fn) { list.push(fn); }, remove: function(fn){ var position = list.indexOf(fn); if( position >=0){ list.splice(position, 1); } }, fire: function(args) { for(var i=0; i<list.length; i++){ var fn = list[i]; fn(args); } } }; }
這樣的話,範例程式碼也需要調整一下。我們直接對用 Callbacks 函數就可以了。
function fn1(args){ console.log("fn1: " + args); } function fn2(args){ console.log("fn2: " + args); } var callbacks = Callbacks(); callbacks.add(fn1); callbacks.fire("Alice"); callbacks.add(fn2); callbacks.fire("Tom"); callbacks.remove(fn1); callbacks.fire("Grace");
下面我們使用第二種方式繼續進行。
對於更複雜的場景來說,我們需要只能 fire 一次,以後即使呼叫了 fire ,也不再生效了。
比如說,可能在創建物件的時候,成為這樣的形式。這裡使用 once 表示僅僅能夠 fire 一次。
var callbacks = Callbacks("once");
那麼,我們的程式碼也需要進行調整。其實很簡單,如果設定了 once,那麼,在 fire 之後,將原來的隊列中直接幹掉就可以了。
function Callbacks(options) { var once = options === "once"; var list = []; return { add: function(fn) { if(list){ list.push(fn); } }, remove: function(fn){ if(list){ var position = list.indexOf(fn); if( position >=0){ list.splice(position, 1); } } }, fire: function(args) { if(list) { for(var i=0; i<list.length; i++){ var fn = list[i]; fn(args); } } if( once ){ list = undefined; } } }; }
jQuery 中,不只提供了 once 一種方式,而是提供了四種類型的不同方式:
once: 只能夠觸發一次。
memory: 當佇列已經觸發之後,再加入進來的函數就會直接被調用,不需要再觸發一次。
unique: 保證函數的唯一
stopOnFalse: 只要有一個回呼回傳 false,就中斷後繼的呼叫。
這四種方式可以組合,使用空格分隔傳入建構函數即可,例如$.Callbacks("once memory unique");
官方文件中,提供了一些使用的範例。
callbacks.add(fn1, [fn2, fn3,...])//增加一個/多個回呼
callbacks.remove(fn1, [fn2, fn3,...])/ /移除一個/多個回呼
callbacks.fire(args)//觸發回調,將args傳給fn1/fn2/fn3…
callbacks.fireWith(context, args)//指定上下文context然後觸發回呼
callbacks.lock()//鎖定佇列目前的觸發狀態
callbacks.disable()//禁掉管理器,也就是所有的fire都不生效
以上是jQuery Callback的基本實作與使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用