摘要:寫在前面專題系列是我寫的第二個系列,第一個系列是深入系列。專題系列自月日發布第一篇文章,到月日發布最后一篇,感謝各位朋友的收藏點贊,鼓勵指正。
寫在前面
JavaScript 專題系列是我寫的第二個系列,第一個系列是 JavaScript 深入系列。
JavaScript 專題系列共計 20 篇,主要研究日常開發中一些功能點的實現,比如防抖、節流、去重、類型判斷、拷貝、最值、扁平、柯里、遞歸、亂序、排序等,特點是研(chao)究(xi) underscore 和 jQuery 的實現方式。
JavaScript 專題系列自 6 月 2 日發布第一篇文章,到 10 月 20 日發布最后一篇,感謝各位朋友的收藏、點贊,鼓勵、指正。
20 篇下來,我們已經跟著 underscore 寫了 debounce、throttle、unique、isElement、flatten、findIndex、findLastIndex、sortedIndex、indexOf、lastIndexOf、eq、partial、compose、memorize 共 14 個功能函數,跟著 jQuery 寫了 type、isArray、isFunction、isPlainObject、isWindow、isArrayLike、extend、each 共 8 個功能函數,自己實現了 shallowCopy、deepCopy、curry、shuffle 共 4 個功能函數,加起來共有 26 個功能函數,除此之外,最后一篇還研究了 V8 的排序源碼,真心希望讀者能從這個系列中收獲頗豐。
順便宣傳一下該博客的 Github 倉庫:https://github.com/mqyqingfeng/Blog,歡迎 star,鼓勵一下作者。
而此篇,作為專題系列的總結篇,除了匯總各篇文章,作為目錄篇之外,還希望跟大家聊聊,我為什么要寫這個系列?
我為什么寫專題系列?如果說深入系列是為了了解 JavaScript 這門語言本身,專題系列就是為了用 JavaScript 具體實現一些功能,我希望它抽離于實踐,無關乎 DOM、BOM,能對大家有所幫助,一想到這些,映入腦海的竟是那些年做過的前端面試題……
是的,回顧整個系列,你會發現,防抖、節流、去重、深淺拷貝、數組扁平化、亂序、柯里化等等不都是面試的經典嗎?我還記得曾經為了準備面試,死記硬背了一個去重的函數,卻從來沒有研究過其他去重的方法,也從來沒有想過它們之前的區別,防抖和節流更是傻傻分不清楚,深淺拷貝反正有 jQuery 的 extend 呢,數組扁平化,我也就有一個遞歸的思路,具體怎么實現我還真是不清楚,亂序我就沒有思路了……哎,都是一知半解或是只是有所耳聞。
想著想著,便不知不覺寫下了很多待研究的課題,研究的方法也隨之浮現,那就是研究 underscore 以及 jQuery 的實現方式,曾經它們看起來很是神秘,也知道閱讀起來并非難事,可還是想一探究竟。
然而研究的過程確實是十分的艱難,因為要做到看懂源碼,理解實現的原理,然而,一段源碼的實現往往會牽涉到多個地方,結果為了看懂某一個函數的具體實現,還要一連串的看多個函數,在理解源碼的過程中,也會有很多的疑惑,我會告訴自己去理解每一個產生疑惑的地方,這句話說起來簡單,做起來很難,我來舉個例子吧,在數組亂序中,有一個方法是:
arr.sort(function(){ return Math.random() - 0.5; });
然而,這個方法的實現是有問題的,它并不能做到真正的亂序。很多文章中,只是用 demo 驗證了這種方法有問題,卻從來沒有說過這個方法究竟哪里有問題,然而我就是對此感到非常疑惑,因為我覺得這個方法很不錯呀,思路巧妙,初見時,還有點小驚艷呢……可是為什么會有問題呢?我百思不得其解,搜了很多文章,也無果,最終,為了解決這個困惑,去看了 v8 的 sort 源碼,然而這段源碼也并不是很容易看的,資料少之又少,先要理解插入排序,快速排序,再去理解 v8 做的諸多優化,結果為了解決這個疑惑,看完了 v8 的 sort 源碼,理解了 sort 的原理后,以數組 [1, 2, 3] 為例,細細分析這種亂序方法在 v8 下具體的排序過程,最后算出來 [1, 2, 3] 亂序后的 6 種結果的概率分別是多少,結果 3 還在原位置的概率有 50%! 到此,才算是心滿意足的解決了這個困惑。
關于這個困惑的具體內容,可以查看該系列的第 19 篇文章。
除此之外,所有的函數我都會自己實現一遍,然而即便看懂了原理,實現也并非能一蹴而就,畢竟如果是你寫,怎么能一開始就想得如此完善呢?所以我都是從一個簡單的寫法開始,向著 underscore 和 jquery 的最終實現方式,一個功能一個功能的迭代實現,你看這個系列很多的文章,都會跟大家講解如何從零實現,一版一版的代碼其實就是迭代實現時的記錄。
感嘆一下,寫文章不容易呀~
全目錄JavaScript專題之跟著underscore學防抖
JavaScript專題之跟著underscore學節流
JavaScript專題之數組去重
JavaScript專題之類型判斷(上)
JavaScript專題之類型判斷(下)
JavaScript專題之深淺拷貝
JavaScript專題之從零實現jQuery的extend
JavaScript專題之如何求數組的最大值和最小值
JavaScript專題之數組扁平化
JavaScript專題之學underscore在數組中查找指定元素
JavaScript專題之jQuery通用遍歷方法each的實現
JavaScript專題之如何判斷兩個對象相等
JavaScript專題之函數柯里化
JavaScript專題之偏函數
JavaScript專題之惰性函數
JavaScript專題之函數組合
JavaScript專題之函數記憶
JavaScript專題之遞歸
JavaScript專題之亂序
JavaScript專題之解讀v8排序源碼
致歉有些讀者給我的文章留言,或感謝,或討論,或指正,因為各種各樣的原因,沒能回復或及時回復,對此致以歉意。
下期預告在我 Github 博客倉庫的描述中,說到我預計寫四個系列:JavaScript深入系列、JavaScript專題系列、ES6系列、React系列。專題系列完結,本來應該是寫 ES6 系列,可是有一個朋友跟我說,寫了這么多函數,可是該如何組織這些函數,形成自己的工具函數庫呢?
對呀,既然都寫了這么多工具函數,為什么不再進一步,將它們以某種方式組織起來呢?
我首先想到的便是借鑒 underscore,underscore 是如何組織代碼的?又是如何實現鏈式調用的?又是如何實現拓展的?有很多值得研究的地方,所以我決定,在 ES6 系列之前,再進一步,寫一個 underscore 系列,旨在幫助大家寫出一個自己的 “underscore”。
感謝大家的閱讀和支持,我是冴羽,underscore 系列再見啦![]~( ̄▽ ̄)~**
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89310.html
摘要:寫在前面深入系列共計篇已經正式完結,這是一個旨在幫助大家,其實也是幫助自己捋順底層知識的系列。深入系列自月日發布第一篇文章,到月日發布最后一篇,感謝各位朋友的收藏點贊,鼓勵指正。 寫在前面 JavaScript 深入系列共計 15 篇已經正式完結,這是一個旨在幫助大家,其實也是幫助自己捋順 JavaScript 底層知識的系列。重點講解了如原型、作用域、執行上下文、變量對象、this、...
摘要:專題系列共計篇,主要研究日常開發中一些功能點的實現,比如防抖節流去重類型判斷拷貝最值扁平柯里遞歸亂序排序等,特點是研究專題之函數組合專題系列第十六篇,講解函數組合,并且使用柯里化和函數組合實現模式需求我們需要寫一個函數,輸入,返回。 JavaScript 專題之從零實現 jQuery 的 extend JavaScritp 專題系列第七篇,講解如何從零實現一個 jQuery 的 ext...
摘要:深入之繼承的多種方式和優缺點深入系列第十五篇,講解各種繼承方式和優缺點。對于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執行了。 JavaScript深入之繼承的多種方式和優缺點 JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優缺點。 寫在前面 本文講解JavaScript各種繼承方式和優缺點。 但是注意: 這篇文章更像是筆記,哎,再讓我...
摘要:所以它與其他系列的文章并不沖突,完全可以在閱讀完這個系列后,再跟著其他系列的文章接著學習。如何閱讀我在寫系列的時候,被問的最多的問題就是該怎么閱讀源碼我想簡單聊一下自己的思路。感謝大家的閱讀和支持,我是冴羽,下個系列再見啦 前言 別名:《underscore 系列 8 篇正式完結!》 介紹 underscore 系列是我寫的第三個系列,前兩個系列分別是 JavaScript 深入系列、...
摘要:忍者級別的函數操作對于什么是匿名函數,這里就不做過多介紹了。我們需要知道的是,對于而言,匿名函數是一個很重要且具有邏輯性的特性。通常,匿名函數的使用情況是創建一個供以后使用的函數。 JS 中的遞歸 遞歸, 遞歸基礎, 斐波那契數列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執行機制 本文的目的就是要保證你徹底弄懂javascript的執行機制,如果...
閱讀 2654·2021-11-23 09:51
閱讀 3246·2021-11-22 14:44
閱讀 4575·2021-11-22 09:34
閱讀 5100·2021-10-08 10:14
閱讀 2403·2021-09-22 15:47
閱讀 3502·2021-09-22 15:40
閱讀 1510·2019-08-30 15:44
閱讀 1619·2019-08-28 18:23