本文給大家分析了不使用js匿名函數的三大理由,JS匿名函數的作用是避免全域變數的污染以及函數名的衝突,關於js匿名函數的三大理由大家參考下本文
匿名函數的基本形式為(function(){...})();
前面的括號包含函數體,後面的括號就是給匿名函數傳遞參數並立即執行之
匿名函數的作用是避免全域變數的污染以及函數名稱的衝突
無論你在什麼時候讀程式碼,您都必須注意到匿名函數。有時它們被稱為 lambda,有時是匿名函數,不管怎樣,我認為他們是不好使用的。
如果你不知道匿名函數是什麼,這裡有一個引語:
匿名函數是一種在運行時動態宣告的函數。它們之所以被稱為匿名函數是因為不同於普通函數,它們並沒有函數名 。 — Helen Emerson, Helephant.com
匿名函數形式如下:
function () { ... code ... } OR (args) => { ... code .. }
我今天嘗試讓大家理解通常情況下只有在絕對需要的情況下才使用匿名函數的想法。匿名函數不應該是首選,而且應該知道原因情況下使用。當理解這種想法之後,你的程式碼會變得更簡潔,更容易維護,更容易追蹤bug。先從避免使用匿名函數的三個理由開始:
你寫程式碼的時候, 無論你多麼擅長敲程式碼, 總是會碰到錯誤。有時候,這些錯誤很容易被查出,有時並不容易。
如果你知道這些錯誤來自哪裡,那麼錯誤就很容易被查出來。為了找出錯誤,我們使用這個被叫做堆疊軌跡的工具。如果你不了解 堆疊軌跡 ,goole給了一個很棒的介紹。
假設現在有一個非常簡單的工程:
function start () { (function middle () { (function end () { console.lg('test'); })() })() }
#上面程式碼裡面有一個很愚蠢的錯誤,拼字錯誤(console.log)。在小工程裡面,這個拼字錯誤不是什麼大問題。 如果這是一個有非常多模組非常大的工程的一小段,問題就大了。假設這個愚蠢的錯誤不是你犯的,那麼新來的初級工程師將會在他休假之前把這個錯誤提交到程式碼庫!
現在,我們必須追蹤。 使用我們精心命名的函數, 我們得到如下的堆疊追蹤:
謝謝你命名你的函數 ,初級開發者們! 現在我們可以輕鬆地追蹤到這個bug。
但是..一旦我們解決了這個問題,就會發現 還有另一個bug。 這次是一位更資深的開發人員介紹的。這個人知道 lambdas
結果他們偶然發現了一個bug,我們的工作就是追蹤它。
下面是程式碼:
(function () { (function () { (function () { console.lg('test'); })(); })(); })();
吃驚,這位開發者也忘瞭如何拼寫console.log了!這也太巧合了吧!令人感到遺憾的是,他們都沒有命名他們的函數。
那麼控制台會輸出什麼呢?
好吧,我們至少還有行號,對吧?在這個例子中,看起來我們有大約7行程式碼。如果我們處理一大段程式碼會如何呢?比如一萬行程式碼?行號的跨度如此之大該怎麼辦?如果程式碼被折疊後有沒有一個程式碼地圖文件,那麼對行號的渲染是不是根本就是沒有什麼用了呢?
我想對這些問題的回答相當簡單,答案就是:想這些會讓你一整天都會過的相當糟心。
可讀性
咦,我聽說你還不相信。你仍舊對你的匿名函數戀戀不捨,而且從未發生過bug。那我得向你道歉,你認為你的程式碼是完美的。讓我們看看這個!
看看下面兩段程式碼:
function initiate (arguments) { return new Promise((resolve, reject) => { try { if (arguments) { return resolve(true); } return resolve(false); } catch (e) { reject(e); } }); } initiate(true) .then(res => { if (res) { doSomethingElse(); } else { doSomething(); } ).catch(e => { logError(e.message); restartApp(); } );
這是一個非常不正常的例子,但是我相信你已經明白我要說什麼 了。我們的方法回傳了一個promise,我們用這個promise物件/方法處理不同可能的 回應。
你也許會認為幾段程式碼讀起來並不難,但我認為它們可以變得更好!
如果我們去掉所有的匿名函式會怎麼樣呢?
function initiate (arguments) { return new Promise(checkForArguments); } function checkForArguments (resolve, reject) { try { if (arguments) { return resolve(true); } return resolve(false); } catch (e) { reject(e); } } function evaluateRes (res) { if (res) { doSomethingElse(); } else { doSomething(); } } function handleError (e) { logError(e.message); restartApp(); } initiate(true) .then(evaluateRes) .catch(handleError);
好,先講清楚:這部分程式碼更長,但我認為其不僅僅是有更多的可讀性!我們精心命名的函數與匿名函數不一樣,只要我們一看到它們的名字就知道它們的功能是什麼。這避免了在評估代碼時的障礙。
這也有助於分清楚其中的關係。與創建一個方法、將其傳遞、然後運行邏輯不同,在第二個例子中的參數被給了then,catch只是指向了發生所有事情的函數。
關於更具有可讀性,我沒有什麼再能說服你的了。但是也許你還沒被說服的話,我可以試試看最後的論點。
相關推薦:
以上是不使用 JS 匿名函數理由的詳細內容。更多資訊請關注PHP中文網其他相關文章!

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同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廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具

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

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中