原创 vue源碼學習之異步更新隊列

異步更新隊列 update() src/core/observer/watchers.js 在執行dep.notify()之後,watcher就會執行update()方法。 update () { // 通知更新 /*

原创 vue源碼學習之初始化過程

初始化過程 初始化過程:init -> $mount -> compile -> new Watcher -> render -> update src/platforms/web/runtime/index.js:實現$mo

原创 vue源碼學習之雙向綁定原理

雙向綁定原理 v-model簡單來講是一個語法糖,可以使得代碼變得更加簡潔。 例如: <input v-model="name" /> <!--相當於--> <input :value = "$attrs.value" @inpu

原创 vue源碼學習之虛擬DOM

虛擬DOM Virtual DOM,是js對象,能夠描述DOM結構和關係。應用的各種狀態變化會作用於虛擬DOM,最終映射到真實DOM上。 具有的優點 虛擬DOM輕量、快速:當發生變化時通過新舊虛擬DOM的比對就可以得到最小的D

原创 vue源碼學習之模板編譯

模板編譯 模板編譯的主要目的是將模板(template)轉換爲渲染函數(render) vue中使用模板編譯的必要性 Vue 2.0需要用到VNode描述視圖以及各種交互,手寫顯然不切實際,因此用戶只需編寫類似HTML代碼的Vu

原创 vue源碼學習之數據響應式

數據響應式 數據的變化會作用於UI而不需要通過DOM操作。在原理上,主要是採用Object.defineProperty(),通過對對象的setter屬性進行攔截,從而將數值的變化轉換圍UI的變化。 在初始化過程中,會調用init

原创 每天一道算法題(十三)

解碼方法 一條包含字母 A-Z 的消息通過以下方式進行了編碼: ‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26 給定一個只包含數字的非空字符串,請計算解碼方法的總數。 示例 1: 輸入: “12” 輸出: 2 解釋:

原创 每天一道算法題(十一)

水壺問題 有兩個容量分別爲 x升 和 y升 的水壺以及無限多的水。請判斷能否通過使用這兩個水壺,從而可以得到恰好 z升 的水? 如果可以,最後請用以上水壺中的一或兩個來盛放取得的 z升 水。 你允許: 裝滿任意一個水壺 清空任意

原创 每天一道算法題(十二)

兩數相除 給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算符。 返回被除數 dividend 除以除數divisor得到的商。 整數除法的結果應當截去(truncat

原创 每天一道算法題(十)

Pow(x,n) 實現 pow(x, n) ,即計算 x 的 n 次冪函數。 示例 1: 輸入: 2.00000, 10 輸出: 1024.00000 示例 2: 輸入: 2.10000, 3 輸出: 9.26100 示例

原创 每天一道算法題(九)

跳躍遊戲 給定一個非負整數數組,你最初位於數組的第一個位置。 數組中的每個元素代表你在該位置可以跳躍的最大長度。 你的目標是使用最少的跳躍次數到達數組的最後一個位置。 示例: 輸入: [2,3,1,1,4] 輸出: 2 解釋:

原创 JavaScript排序算法之堆排序

堆排序 是一種很高效的算法,這種算法把數組當作二叉樹來管理。 索引0就是樹的根節點 除根節點外,任意節點N的父節點是N/2(Math.floor向下取整,是節點在數組中的位置而不是索引) 節點L的左子節點是2*L(是節點在數組中

原创 JavaScript排序算法之快速排序

快速排序 快速排序也許是最常用的排序算法了。它的複雜度爲O(nlog^n),且它的性能通常比其他的複雜度爲O(nlogn)的排序算法要好。和歸併排序一樣,快速排序也使用分治的方法,將原始數組分爲較小的數組(但它沒有像歸併排序那樣將

原创 Javascript排序算法之選擇排序

選擇排序 這個算法倒是非常容易理解,就是在數據結構中找到最小值,並放置在第一位,然後找第二小的值,以此類推。 class ArrayList{ constructor(){ this.array = [] }

原创 每天一道算法題(八)

缺失的第一個正數 給你一個未排序的整數數組,請你找出其中沒有出現的最小的正整數。 示例 1: 輸入: [1,2,0] 輸出: 3 示例 2: 輸入: [3,4,-1,1] 輸出: 2 示例 3: 輸入: [7,8,9,1