_fn(1, 2, 3, 4, 5) // print: 1,2,3,4,5
_fn(1)(2)(3, 4, 5) // print: 1,2,3,4,5
_fn(1, 2)(3, 4)(5) // print: 1,2,3,4,5
_fn(1)(2)(3)(4)(5) // print: 1,2,3,4,5
複製**柯理化函式的實現
// 對求和函式做curry化
let f1 = curry(add, 1, 2, 3)
console.log(『複雜版』, f1()) // 6
// 對求和函式做curry化
let f2 = curry(add, 1, 2)
console.log(『複雜版』, f2(3)) // 6
// 對求和函式做curry化
let f3 = curry(add)
console.log(『複雜版』, f3(1, 2, 3)) // 6
// 複雜版curry函式可以多次呼叫,如下:
console.log(『複雜版』, f3(1)(2)(3)) // 6
console.log(『複雜版』, f3(1, 2)(3)) // 6
console.log(『複雜版』, f3(1)(2, 3)) // 6
checkbyregexp(/^1\dkatex parse error: undefined control sequence: \w at position 46: …eckbyregexp(/^(\̲w̲)+(\.\w+)*@(\w)…/, 『[email protected]』) // 校驗郵箱
複製**我們每次進行校驗的時候都需要輸入一串正則,再校驗同一型別的資料時,相同的正則我們需要寫多次, 這就導致我們在使用的時候效率低下,並且由於 checkbyregexp 函式本身是乙個工具函式並沒有任何意義。此時,我們可以借助柯里化對 checkbyregexp 函式進行封裝,以簡化**書寫,提高**可讀性。
//進行柯里化
let _check = curry(checkbyregexp)
//生成工具函式,驗證**號碼
let checkcellphone = _check(/^1\dkatex parse error: undefined control sequence: \w at position 45: …il = _check(/^(\̲w̲)+(\.\w+)*@(\w)…/)
checkcellphone(『18642838455』) // 校驗**號碼
checkcellphone(『13109840560』) // 校驗**號碼
checkcellphone(『13204061212』) // 校驗**號碼
複製**柯里化函式引數 length
函式 currying 的實現中,使用了 fn.length 來表示函式引數的個數,那 fn.length 表示函式的所有引數個數嗎?並不是。
函式的 length 屬性獲取的是形參的個數,但是形參的數量不包括剩餘引數個數,而且僅包括第乙個具有預設值之前的引數個數,看下面的例子。
((a, b, c) => {}).length
// 3
((a, b, c = 3) => {}).length
// 2
((a, b = 2, c) => {}).length
// 1
((a = 1, b, c) => {}).length
// 0
((…args) => {}).length
// 0
const fn = (…args) =>
fn(1, 2, 3)
// 3
複製**compose 函式
compose 就是組合函式,將子函式串聯起來執行,乙個函式的輸出結果是另乙個函式的輸入引數,一旦第乙個函式開始執行,會像多公尺諾骨牌一樣推導執行後續函式。
const greeting = name =>hello $
const toupper = str => str.touppercase()
toupper(greeting(『onion』)) // hello onion
複製**compose 函式的特點
compose 接受函式作為引數,從右向左執行,返回型別函式
fn()全部引數傳給最右邊的函式,得到結果後傳給倒數第二個,依次傳遞
compose 的實現
var compose = function(…args) else }}
複製**舉個例子
var greeting = (name) =>hello $
var toupper = str => str.touppercase()
var fn = compose(toupper, greeting)
console.log(fn(『jack』))
複製**大家熟悉的數控工具機解密 裡面的 loader 執行順序是從右到左,是因為webpack 選擇的是 compose 方式,從右到左依次執行 loader,每個 loader 是乙個函式。
rules: [
]複製**如上,webpack 使用了 style-loader 和 css-loader,它是先用 css-loader 載入.css 檔案,然後 style-loader 將內部樣式注入到我們的 html 頁面。
webpack 裡面的 compose **如下:
const compose = (…fns) => ,
value => value)}
數控工具機解密
webpack 的 loader 本質上其實就是乙個函式,數控工具機解密我們可以在這個函式內部,根據正則匹配出我們想刪除的字串,對其進行替換。自定義 loaders ignore console log loader.js 很簡單,如下 const reg console.log gmodule.e...
數控工具機基礎教學
一 數控工具機的座標系 關於數控工具機的座標軸和運動方向,iso組織對作了統一的規定,並制訂了iso841標準 這與我國有關部門制定的相應標準jb3051 82相當。一 座標軸及運動方向的規定 1.工具機上乙個直線進給運動或乙個圓周進給運動定義乙個座標,其中直線進給運動座標軸為x y z軸,稱為基本...
2020數控工具機資料採集
在國家大力推進工業物聯網的大背景下,國內從事數控工具機資料採集工作的公司不少。本人在這個行業摸爬滾打也有些年了,目前就自己做的數控工具機資料採集做個簡單總結。一 fanuc網絡卡的 目前focas在網路上都可以找到資源,不做過多說明 二 西門子840d 這款數控系統看似簡單,裡面的坑實在是多。單西門...