原创 JS模塊化編程

前言 什麼是模塊化? 模塊就是實現特定功能的一組方法,而模塊化是將模塊的代碼創造自己的作用域,只向外部暴露公開的方法和變量,而這些方法之間高度解耦。 寫 JS 爲什麼需要模塊化編程? 當寫前端還只是處理網頁的一些表單提交,點擊交互的時候,還

原创 JS異步編程之Promise

前言 《JS異步編程之 callback》一文我們瞭解了“JS 是基於單線程事件循環”的概念構建的,回調函數不會立即執行,由事件輪詢去檢測事件是否執行完畢,當執行完有結果後,將結果放入回調函數的參數中,然後將回調函數添加到事件隊列中等待被執

原创 JS異步編程之callback

爲什麼 JS 是單線程? 衆所周知,Javascript 語言的執行環境是"單線程"(single thread)。 所謂"單線程",就是指一次只能完成一件任務。如果有多個任務,就必須排隊,前面一個任務完成,再執行後面一個任務,以此類推。

原创 JS專題之繼承

前言 衆所周知,JavaScript 中,沒有 JAVA 等主流語言“類”的概念,更沒有“父子類繼承”的概念,而是通過原型對象和原型鏈的方式實現繼承。 於是,我們這一篇講一講 JS 中的繼承(委託)。 一、爲什麼要有繼承? JavaScri

原创 JS專題之垃圾回收

前言 在講 JS 的垃圾回收(Garbage Collection)之前,我們回顧上一篇《JS專題之memoization》,memoization 的原理是以參數作爲 key,函數結果作爲 value, 用對象進行緩存起來,以內存空間換

原创 JS專題之memoization

前言 在計算機領域,記憶(memoization)是主要用於加速程序計算的一種優化技術,它使得函數避免重複演算之前已被處理過的輸入,而返回已緩存的結果。 -- wikipedia Memoization 的原理就是把函數的每次執行結果都放

原创 JS專題之嚴格模式

ECMAScript 5 引入了 strict mode ,現在已經被大多瀏覽器實現(從IE10開始) 一、什麼是嚴格模式 顧名思義,JavaScript 嚴格模式就是讓 JS 代碼以更嚴格的模式執行,不允許可能會引發錯誤的代碼執行。在正常

原创 JS專題之數組展開

前言 首先什麼是數組展開? 假如現在有這樣一個需求:將後臺的一個多重 List 數據,展開成一個 List 後,並去重後排序; ["a", "b", ["c", "d"], [["d"],"e"], "f"] => ["a", "b",

原创 JS專題之深淺拷貝

前言 在開發過程中,偶爾會遇到這種場景,拿到一個數據後,你打算對它進行處理,但是你又希望拷貝一份副本出來,方便數據對比和以後恢復數據。 那麼這就涉及到了 JS 中對數據的深淺拷貝問題,所謂深淺拷貝,淺拷貝的意思就是,你只是複製了對象數據的引

原创 JS專題之數組去重

前言 數組去重在日常開發中的使用頻率還是較高的,也是網上隨便一抓一大把的話題,所以,我寫這篇文章目的在於歸納和總結,既然很多人都在提的數組去重,自己到底瞭解多少呢。又或者是如果自己在開發中遇到了去重的需求,自己能想到更好的解決方案嗎。 這次

原创 JS專題之函數柯里化

#### 前言 在計算機科學中,柯里化(英語:Currying),又譯爲卡瑞化或加里化,是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受餘下的參數而且返回結果的新函數的技術。 #### 一、爲什麼會有

原创 JS專題之數據類型和類型檢測

本文共 1750 字,讀完只需 7 分鐘 數據類型有哪些? ECMAScript 的數據類型分爲簡單數據類型(也被稱爲基本數據類型,原始數據類型): Undefined Null String Number Boolean 在 ES6

原创 JS專題之節流函數

本文共 2000 字,讀完只需 8 分鐘 上一篇文章講了去抖函數,然後這一篇講同樣爲了優化性能,降低事件處理頻率的節流函數。 一、什麼是節流? 節流函數(throttle)就是讓事件處理函數(handler)在大於等於執行週期時才能執行,週

原创 JS專題之去抖函數

一、前言 爲什麼會有去抖和節流這類工具函數? 在用戶和前端頁面的交互過程中,很多操作的觸發頻率非常高,比如鼠標移動 mousemove 事件, 滾動條滑動 scroll 事件, 輸入框 input 事件, 鍵盤 keyup 事件,瀏覽器窗

原创 JS專題之事件循環

準備知識 1. 進程(process) 進程是系統資源分配一個獨立單位,一個程序至少有一個進程。比方說:一個工廠代表一個 CPU, 一個車間就是一個進程,任一時刻,只能有一個進程在運行,其他進程處於非運行狀態。 2. 線程(Thread)