摘要:而事實上為了消除這個現象,衍生出來的模式有很多,比如策略模式,單例模式,迭代器模式等。比如自己定義一個迭代器這就是一個簡單的內部迭代器。迭代器的應用說了迭代器的基本原理后,應該來點干貨了。
程序的bug王
請不要被標題所迷惑,這樣說bug王,只是為了吸睛。 在程序的世界里,我們要多喝茶,慢慢聊。回歸正題,這里想說的bug王指的是條件的分支語句。 比如: if...else if...else if... else if.........esle... 。想這樣的。
看個實例:
var model = function(flag){ if(flag===0){ return "this is zero"; }else if(flag === 1){ return "this is first"; }else if(falg === 2){ return "this is second"; }else { ... } }
像這樣的。 因為每一次條件判斷都是對性能的一次rape。而事實上為了消除這個現象,衍生出來的模式有很多,比如: 策略模式,單例模式,迭代器模式等。這里主要想講一下,迭代器模式.
迭代器模式迭代器其實就是一個遍歷,能夠順序遍歷一個聚合對象中的一些屬性. 比如數組中的.Array.prototype.forEach。
其實就是遍歷,然后將獲得的參數進行回調處理(!!!注意,迭代器最重要的一點就是將循環中的遍歷數組的參數傳給回調函數處理.)
var arr = [1,2,3,4,5]; arr.forEach(function(val,index,arr){ ... })
而且迭代器模式你可以自定義迭代,比如內部迭代,外部迭代,順序迭代,倒序迭代等等. 由于懶,所以就列一個比較常見的順序迭代吧。
通常也就是使用了for循環來構建的。 比如自己定義一個迭代器
var each = function(arr,fn){ for(var i = 0,val;val = arr[i++];){ if(val==false){ break; } fn(val,index,arr); } }
這就是一個簡單的內部迭代器。即將數組類型進行簡單的遍歷,然后如果遍歷完成則返回。
迭代器的應用說了迭代器的基本原理后,應該來點干貨了。
迭代器在各種語言中,差不多都已經普及了,所以重構已有的方法是沒有什么價值的。但迭代器最主要的功能是自定義一些系列算法,將所需要的提取出來. 比如: 事件模型事件的獲取。
var bind = (function() { if (document.addEventListener) { return function(ele, fn, type) { ele.addEventListener(type, fn, false); } } else if (document.attachEvent) { //檢測低版本的IE return function(ele, fn, type) { ele.attachEvent(type, fn); } } else { return function(ele,fn,type){ ele[`on${type}`] = fn; } } })();
可以看出里面充斥著分支語句,為了消除分支。可以將不同的方法包裝起來,然后使用迭代器統一遍歷.
var bind = (function(){ var DOM2 = (function(){ if (document.addEventListener) { return function(ele,fn,type){ ele.addEventListener(type,()=>{fn();},false); } }else { return false; } })(); var IE = (function(){ if(document.attachEvent){ return function(ele,fn,type){ ele.attachEvent(type,fn); } }else{ return false; } })(); var DOM0 = function(ele,fn,type){ ele[`on${type}`] = ()=>{fn();}; } //添加迭代器 var Itera = function(){ for(var i = 0,val;val = arguments[i++];){ if(typeof val === "function"){ return val; } } } return Itera(DOM2,IE,DOM0); })(); console.log(bind); ////function (ele,fn,type){ele.addEventListener(type,()=>{fn();},false);}
接著你就可以使用bind()函數進行事件的綁定處理。但是這個應該算是將原來簡單的變復雜了,因為現在事件模式幾乎只有這3種(原生). 拓展性我就不說了。 所以一般用來判斷事件綁定的話,推薦還是使用上面那個方式,來得更直接.
但可以從上面的例子可以看出,迭代器模式只是提供一種思想,提取最精華的部分,通過遍歷選出最優解。模式這么多,關鍵要找到最適合你的。還是那句話,如果這個坑 坑不死我,我一定會踩更多的坑。 所以多實踐,多學習,多踩坑才是進步的證明。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91598.html
摘要:相比于,它將也作為隱變量納入到變分推斷中。結論綜述本文的結果表明了變分推斷確實是一個推導和解釋生成模型的統一框架,包括和。 作者丨蘇劍林單位丨廣州火焰信息科技有限公司研究方向丨NLP,神經網絡個人主頁丨kexue.fm前言我小學開始就喜歡純數學,后來也喜歡上物理,還學習過一段時間的理論物理,直到本科畢業時,我才慢慢進入機器學習領域。所以,哪怕在機器學習領域中,我的研究習慣還保留著數學和物理的...
摘要:假定出售一段長度為英寸的鋼條的價格為單位,鋼條長度均為整英寸。注若長度為英寸的鋼條的價格足夠大,最優解可能就是完全不需要切割。考慮長度為的情況,下圖給出了英寸鋼條的所有切割方案。 DP和分治的相似 都是通過組合子問題的解來求解原問題。 DP中的programming指的是一種表格法,而非coding。 DP和分治的不同 分治步驟:(例如歸并排序) 將問題劃分為互不相交的子問題 ...
閱讀 1907·2021-09-23 11:21
閱讀 1693·2019-08-29 17:27
閱讀 1053·2019-08-29 17:03
閱讀 719·2019-08-29 15:07
閱讀 1915·2019-08-29 11:13
閱讀 2374·2019-08-26 12:14
閱讀 904·2019-08-26 11:52
閱讀 1729·2019-08-23 17:09