本文主要跟大家介紹了用函數式程式設計對JavaScript進行斷舍離,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。
關於DHTML
DHTML是Dynamic HTML的簡稱,就是動態的html(標準通用標記語言下的一個應用),是相對傳統的靜態的html而言的一種製作網頁的概念。所謂動態HTML(Dynamic HTML,簡稱DHTML),其實並不是新的語言,它只是HTML、CSS和客戶端腳本的一種集成,即一個頁面中包括html+css+javascript(或其它客戶端腳本),其中css和客戶端腳本是直接在頁面上寫而不是連結上相關文件。
在那個時候,JavaScript的演化很慢,主要應用在表單驗證。因此,不像今天這麼火爆,並沒有引起太多的關注。可以說只是一個錦上添花的附加物,你需要確保在瀏覽器停用JavaScript之後,你的應用程式仍然可以正常使用。再往後,框架一個接著一個出現:jQuery,Knockout, Angular, React, Vue, 等等。
同樣,JavaScript也在加速演化。我們才使用ES6不久,現在人們幾乎已經跳過ES7,開始討論ES8了。
並且,我們有很多替代品,像是TypeScript,CoffeScript,ClojureScript, ELM,等等。
我們已經被太多的框架和語言所淹沒,很難去追蹤和掌握所有的語言和框架。
錯誤路線
當JavaScript逐漸成熟,物件導向程式設計(OOP)的概念也滲透進來,而且我曾經很喜歡。
我開始嘗試所有不同的方法來建立類,我最終也可以正確的使用繼承。我對自己說:JavaScript開始真的像一個語言了!
但是,直到多年以後我發現OOP是JavaScript引進的最糟糕的一個設計!
我嘗試將我對C#的理解帶入JavaScript中去。一開始充滿期待,但後來發現真的太複雜,太燒腦了。
這主要是因為JavaScript的原型繼承和C#不一樣,我已經習慣每天寫類似console.log(this)這樣飄逸的程式碼。但是現在呢?如果我一不小心沒按照規則來,那將會帶給我惡夢。私有方法和私有值必須要在名字前面加上底線,甚至必須用閉包來保證私有。
因此,不僅OOP導致了許多問題,同時也因為新增OOP帶來了許多新的問題。
函數式程式設計
一開始我並不理解。我可以閱讀並理解這些用函數式編寫的程式碼,但我不知道為什麼!最終,我強迫我自己去學習它。
函數式語言給了我一個全新的視角,讓我從一個完全不同的方式去看待程式設計。
一開始會覺得不自然,需要時間適應。所有的定義都是基於函數,值不可更改,無狀態。我用函數式的思維去解決問題。因為不熟悉,我花了更長的時間學習。漸漸地,我熟練了使用函數式的方法去程式設計。並且,我也知道所有程式碼這樣寫的內在意義。
我的程式碼更簡潔了,而且很容易重複使用。漸漸的,我以前使用的那些語言特性從程式碼中消失了,我的程式碼看起來像是用另一個語言寫。我還在用JavaScript嗎?
1. 不再使用var
我用const取代了var。透過函數式的設計,我的函數都是純(pure)的。不會再去對一個變數進行值的變更操作,同樣也是為了確保不會對其操作。
我會檢查程式碼確保每一個var,甚至let,所有聲明都使用const。
2. 沒有for迴圈
在學習程式語言的時候,我們一開始就會學到for迴圈。但自從學習了函數式編程,我將for迴圈都改成了使用filter, map和reduce來實現。對於那些需要一些額外計算的需求,我會使用遞迴或則第三方函式庫例如lazy.js。
如今我的程式碼裡面完全沒有for循環了,如果你看到了,告訴我我會把它消除。
3. if也可以被簡化
我開始停止在if裡面寫大大塊的程式碼。我將裡面的邏輯抽取出來單獨放在一個函數中。這樣,我們就可以將if用三元算子(a?b:c)來簡化。
如今我的程式碼裡面幾乎沒有if語句。為了方便其他開發者理解我的程式碼,我很少使用它。
4. 和switch說拜拜
同樣,我也不喜歡用switch,而是找一個函數式的寫法。
我也很喜歡用Ramda的cond算子來取代swtich。
5. 不在擔心this
對的,你沒有聽錯!我們也可以完全消除this。
函数式的JavaScript可以让你完全抛弃使用烦人的this
现在只有数据和函数,甚至数据不过是函数的一种特殊表达形式,你再也不需要this了。我开始将对象理解为函数式语言中状态(state)和函数。我甚至不需要把状态或则函数和对象绑定到一起,就像OOP中那样。
面向对象的设计不是必须的
现在往回看,我发现面型对象编程带来的复杂度真的是不必要的。我可以使用函数式语言实现同样的功能,完成相同的任务。而且,代码更加轻简,因为不在需要将这些复杂的对象传来传去。只有数据和函数,而且因为函数没有和对象绑定,更加容易复用。我不在需要担心传统的原型继承带来的所有的问题,JavaScript设计的并不好。
JavaScript缺乏私有、公有、内部或则被保护这类访问控制器也不再是一个问题。访问控制器是用来解决由于引入面向对象编程而设计的。在函数式的JavaScript中,这些问题不复存在。
总结
我的代码现在看上去完全不同。它包含了很多纯函数,我将它们做成不同的ES6模块。这些函数可以被使用来构建更加复杂的函数。很大一部分函数都是很简单的一行lambda表达式。
现在我看待软件的思维也变了:输入是一个数据流,然后程序作用到该数据流上对数据进行各种操作,然后返回新的数据。
函数式设计对程序语言的影响以及无处不在,C#中的LINQ就是一个最佳的例子。同样Java 8也引入了函数式语言的特性。
相关推荐:
以上是使JavaScript進行斷舍離的函數分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript開發工具

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