首頁

如何讀懂并寫出裝逼的函數(shù)式代碼

藍藍設計的小編

今天在微博上看到了 有人分享了下面的這段函數(shù)式代碼,我把代碼貼到下面,不過我對原來的代碼略有改動,對于函數(shù)式的版本,咋一看,的確令人非常費解,仔細看一下,你可能就暈掉了,似乎完全就是天書,看上去非常裝逼,哈哈。不過,我感覺解析那段函數(shù)式的代碼可能會一個比較有趣過程,而且,我以前寫過一篇《函數(shù)式編程》的入門式的文章,正好可以用這個例子,再升華一下原來的那篇文章,順便可以向大家更好的介紹很多基礎知識,所以寫下這篇文章。

先看代碼

這個代碼平淡無奇,就是從一個數(shù)組中找到一個數(shù),O(n)的算法,找不到就返回 null。

下面是正常的 old-school 的方式。不用多說。

//正常的版本 function find (x, y) { for ( let i = 0; i < x.length; i++ ) { if ( x[i] == y ) return i;
  } return null;
} let arr = [0,1,2,3,4,5] console.log(find(arr, 2)) console.log(find(arr, 8))

HTML5手勢檢測原理和實現(xiàn)

藍藍設計的小編

前言

隨著 Hybrid 應用的豐富,HTML5 工程師們已經不滿足于把桌面端體驗簡單移植到移動端,他們覬覦移動原生應用人性化的操作體驗,特別是原生應用與生俱來的豐富的手勢系統(tǒng)。HTML5 沒有提供開箱即用的手勢系統(tǒng),但是提供了更底層一些的對 touch 事件的監(jiān)聽?;诖耍覀兛梢宰龀鲎约旱氖謩輲?。

手勢

常用的 HTML5 手勢可以分為兩類,單點手勢和兩點手勢。單點手勢有 tap(單擊),double tap(雙擊),long tap(長按),swipe(揮),move(移動)。兩點手勢有 pinch(縮放),rotate(旋轉)。

接下來我們實現(xiàn)一個檢測這些手勢的 javaScript 庫,并利用這個手勢庫做出炫酷的交互效果。

1.jpg

2016年7個JavaScript框架

藍藍設計的小編

當涉及到Web開發(fā)時,JavaScript框架往往是一些開發(fā)人員和企業(yè)的平臺??赡?,你有機會嘗試過一兩個的JavaScript框架,但你仍然有點不確定哪個才是最佳的最值得掌握的,或者哪個值得你建議你的開發(fā)人員選擇用于下一個web開發(fā)項目。

JavaScript正在以驚人的速度前進,并且添加新的技能到你的存儲庫變得有不斷的壓力。為了做到這一點,知道和了解更多的JavaScript框架在現(xiàn)在看來是必要的。在ValueCoders進行了徹底的研究后,我們入圍了其中七個框架,它們是:

1.AngularJS 2.0&1.x

在最受期待的AngularJS 2.0正式發(fā)布之后,框架的普及已經達到了一個新的水平。然而,如果你不確定的話,跳到新版本仍然是一個冒險的決定。讓我們通過這個流程圖來幫助你做出決定:

1.png

JavaScript 數(shù)組中的 indexOf 方法詳解

藍藍設計的小編

最近項目遇到一個小問題代碼我會簡化成小例子展示給大家。

用心看到最后會有收獲哈,基礎扎實的童鞋可以直接跳到數(shù)組類型使用

說到 indexOf 大家并不陌生,判斷字符串是否包涵子字符串時特別常用(正則不熟練同學的利器)。

String 類型的使用

溫習一下大家熟知的字符串用法,舉個例子

let str = 'orange';

str.indexOf('o'); //0 str.indexOf('n'); //3 str.indexOf('c'); //-1

這里 0 和 3 分別是 o 和 n 在字符串中出現(xiàn)的位置。起始下標是 0。而 -1 代表未匹配。

JavaScript arguments 對象詳解

藍藍設計的小編

1. 什么是 arguments

MDN 上解釋:

arguments 是一個類數(shù)組對象。代表傳給一個function的參數(shù)列表。

我們先用一個例子直觀了解下 JavaScript 中的 arguments 長什么樣子。

function printArgs() { console.log(arguments);
}

printArgs("A", "a", 0, { foo: "Hello, arguments" });

執(zhí)行結果是:

jQuery XML 解析器和搜索機制

藍藍設計的小編

介紹

這里所描述的過程將使你能夠創(chuàng)建一個簡單的基于jQuery / XML的解析器和搜索機制。此過程將通過一個AJAX請求檢索XML,然后在jQuery中分析數(shù)據(jù),為搜索機制做準備。該解決方案將基于不區(qū)分大小寫的全部或部分關鍵字匹配地返回結果。來自于關鍵字搜索的返回結果設置將被格式化為一個直接鏈接到相應網站的超鏈接。jQuery搜索方法非常類似于Mike Endale的一個項目,不過增加了一個DOM解析器,正則表達式以及結果集分組。

背景

客戶端需要一個簡單的搜索工具來查找基于關鍵字搜索的本地內部網站。關鍵字搜索必須不區(qū)分大小寫,并允許返回部分匹配的結果。歸咎于客戶端內容管理系統(tǒng)的架構,因此(SharePoint)只能執(zhí)行客戶端腳本。其解決方案的另一個障礙是,源數(shù)據(jù)將來自多個源。數(shù)據(jù)被存儲在多個Excel電子表格,CSV文件和MS Access數(shù)據(jù)庫內。這就對我們提出了這樣的需要:開發(fā)具有一系列查詢和一個宏的Access解決方案,充當可合并、擦洗,并最后格式化數(shù)據(jù)作為XML輸出的偽ETL。對于這個解決方案的目的,我們將詳細介紹JavaScript XML分析器的設計,而不是偽Access ETL宏工具的設計。

使用代碼

該解決方案的做法是利用一個簡單的基于JavaScript / XML的搜索來發(fā)送數(shù)據(jù)結果到HTML / JavaScript前端。前端將引用腳本:jQuery,XML和CSS文件。XML格式將因為它的可讀性和它是數(shù)據(jù)交換行業(yè)標準格式之一的事實而被使用。 XML數(shù)據(jù)將通過使用AJAX的客戶端jQuery解析,并通過Internet Explorer 11呈現(xiàn)。

解決方案將使用RegExp對象來處理關鍵字匹配,驗證和特殊字符處理。RegExp對象字符串將檢查危險語法從而提高解決方案的穩(wěn)定性和整體可用性。

我們將默認使用JavaScript分組功能來返回匹配結果作為折疊的紀錄集。折疊的記錄集線項目將被URL鏈接到相關的Project Workspace網站。在擴展的組記錄集下,結果將存在于相關的子記錄中,當通過On Click事件展開的時候。

選擇 Reac??tJS 的五大理由

藍藍設計的小編

ReactJS是一個開源的JavaScript庫,并且由Facebook和Instagram這樣的頂尖IT企業(yè)以及開發(fā)者社區(qū)所維護。該框架廣泛使用于為web應用程序開發(fā)用戶界面的時候。這個特殊的框架被發(fā)明時帶有這樣一個目的:

“構建數(shù)據(jù)隨著時間的推移一次又一次改變的大型應用程序?!?

我們經常使用的工具有很多,但只有少數(shù)徹底改變了我們的工作流程。ReactJS就是其中之一。隨著現(xiàn)在可用框架變得越來越多,我們很難找到一個最終不會窮途末路的框架。這就是為什么在ValueCoders我們建議去往React。

01.png

能用HTML/CSS解決的問題就不要使用JS

藍藍設計的小編

為什么說能使用html/css解決的問題就不要使用JS呢?兩個字,因為簡單。簡單就意味著更快的開發(fā)速度,更小的維護成本,同時往往具有更好的體驗,下面介紹幾個實例。

1. 導航高亮

導航高亮是一種很常見的問題,包括當前頁面的導航在菜單里面高亮和hover時高亮。你可以用js控制,但是用一點CSS技巧就可以達到這個目的,不需要使用JS。

1.png

2.png

在正常態(tài)時,每個導航的默認樣式為:

JavaScript 閉包的底層運行機制

藍藍設計的小編

當JavaScript在運行的時候,它需要一些空間讓它來存儲本地變量(local variables)。我們將這些空間稱為作用域對象(Scope object),有時候也稱作LexicalEnvironment。例如,當你調用函數(shù)時,函數(shù)定義了一些本地變量,這些變量就被存儲在一個作用域對象中。你可以將作用域函數(shù)想象成一個普通的JavaScript對象,但是有一個很大的區(qū)別就是你不能夠直接在JavaScript當中直接獲取這個對象。你只可以修改這個對象的屬性,但是你不能夠獲取這個對象的引用。

作用域對象的概念使得JavaScript和C、C++非常不同。在C、C++中,本地變量被保存在棧(stack)中。在JavaScript中,作用域對象是在堆中被創(chuàng)建的(至少表現(xiàn)出來的行為是這樣的),所以在函數(shù)返回后它們也還是能夠被訪問到而不被銷毀。

JavaScript 中匿名函數(shù)的遞歸調用

藍藍設計的小編

不管是什么編程語言,相信稍微寫過幾行代碼的同學,對遞歸都不會陌生。 以一個簡單的階乘計算為例:

function factorial(n) { if (n <= 1) { return 1;
    } else { return n * factorial(n-1);
    }
}

我們可以看出,遞歸就是在函數(shù)內部調用對自身的調用。 那么問題來了,我們知道在Javascript中,有一類函數(shù)叫做匿名函數(shù),沒有名稱,怎么調用呢?當然你可以說,可以把匿名函數(shù)賦值給一個常量:

const factorial = function(n){ if (n <= 1) { return 1;
    } else { return n * factorial(n-1);
    }
}

日歷

鏈接

個人資料

藍藍設計的小編 http://bouu.cn

存檔