搜尋
首頁web前端js教程使JavaScript進行斷舍離的函數分享

使JavaScript進行斷舍離的函數分享

Feb 09, 2018 pm 01:37 PM
javascriptjs分享

本文主要跟大家介紹了用函數式程式設計對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也引入了函数式语言的特性。

相关推荐:

详细介绍XML行为(behavior)-新的DHTML?

以上是使JavaScript進行斷舍離的函數分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript的角色:使網絡交互和動態JavaScript的角色:使網絡交互和動態Apr 24, 2025 am 12:12 AM

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

C和JavaScript:連接解釋C和JavaScript:連接解釋Apr 23, 2025 am 12:07 AM

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

從網站到應用程序:JavaScript的不同應用從網站到應用程序:JavaScript的不同應用Apr 22, 2025 am 12:02 AM

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

Python vs. JavaScript:比較用例和應用程序Python vs. JavaScript:比較用例和應用程序Apr 21, 2025 am 12:01 AM

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

C/C在JavaScript口譯員和編譯器中的作用C/C在JavaScript口譯員和編譯器中的作用Apr 20, 2025 am 12:01 AM

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

JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

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

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

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

了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

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

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

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