JavaScript中使用bind()方法讓程式碼更乾淨的詳細介紹
幾個星期前,我寫了一篇關於如何在一個循環中關閉呼叫非同步函數的影響以及處理這個問題的若干方法。
在我最近的編碼中,我發現了一個更簡單的方法。在這個過程中,它消除了匿名函數並刪除了linting錯誤,「不要在循環中寫函數」。
你看,我一直在使用JavaScript中的bind()
試驗。事實證明,我們可以在多個場合,包括處理我幾週前提到的閉包問題中,使用bind。
什麼是bind()?
bind函數最近才加入到JavaScript的規格說明中,所以它只能工作在最新的瀏覽器上。你可以查看相容性表格看看哪些瀏覽器實作bind()
以及其他JavaScript功能。我仔細地看了名單,我關注的瀏覽器沒有不支援bind()
的。當然你的情況可能會有所不同。
bind所做的就是自動封裝函數在函數自己的閉包中,這樣我們可以捆綁上下文(this關鍵字)和一系列參數到原來的函數。
你最終得到的是另一個函數指標。
function add(a,b){ return a + b; } var newFoo = add.bind(this,3,4);
請注意,我們不僅捆綁this到foo()
函數,而且我們也捆綁了兩個參數。所以,當我們呼叫newFoo()
的時候,回傳值將會是7。
但是,如果我們在呼叫之前newFoo更改的參數的話,會發生什麼?
更改bind參數
如果我們使用變數綁定參數到foo()
,然後在呼叫newFoo()
之前改變變量,你覺得值會變成為什麼呢?
function add(a,b){ return a + b; } var a = 3; var b = 4; var newFoo = add.bind(this,a, b); a = 6; b = 7; console.log(newFoo());
傳回值仍然是7,因為bind()綁定的是參數的值,而不是實際變數的值。
這是好消息,就像我說的,我們可以在程式碼中利用這個巨大的優勢。但是,對我而言它最有用的地方是在callbacks中。
bind和callbacks
還記得那篇文章中我們在循環中處理callbacks的解決方案之一就是,圍繞我們想要呼叫的函數創建匿名函數。
for(var i = 0;i < 10;i++){ (function(ii){ setTimeout(function(){ console.log(ii); },1000); })(i);
但是我們可以使用bind,大大簡化程式碼。
function consoleLog(i){ console.log(i); } for(var i = 0;i < 10;i++){ setTimeout(consoleLog.bind(this,i),1000); }
這是因為每次呼叫bind就會給出一個新的函數指針,並且保留原來的函數不變。
同時,我們也刪除了linting錯誤“不要在循環寫函數”,因為我們不是在循環中創造的函數,我們只是指向了我們在循環外創建的函數。
bind用於事件處理程序
bind()
可以讓你的程式碼乾淨起來的另一個地方是在事件處理程序。大家都知道,或應該知道,當一個事件處理程序被呼叫時,它所訪問的上下文會產生事件,而不是在創建事件處理程序的物件中。透過使用bind,可以肯定的是,函數會被存取正確的上下文。
function ClassName(){ this.eventHandler = (function(){ }).bind(this); }
不是說你要像那樣寫程式碼,這只是為了說明重點。
Currying
什麼? !
OK。我會是第一個承認,自己的函數式程式設計知識是有限的。我能給出的關於Currying的最佳定義是,它允許你在多個步驟中傳遞參數。
使用bind,我們就可以像這樣寫程式碼實作Currying:
function add(a,b,c) { return a+b+c; } var addAgain = add.bind(this, 1, 2); var result = addAgain(3);
以上就是JavaScript中使用bind()方法讓程式碼更乾淨的詳細介紹的內容,更多相關內容請關注PHP中文網(www.php.cn)!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務
