JavaScript為什麼要函數式?
結論: 因為JS透過函數式可以跑得更快,原因是在資料存取過程,避免了最耗時間的重複複製釋放
解說: 這裡發生了什麼?
function f(a) { console.log(a); } f(100);
- 內存調用出一塊填充函數數據並用f作為標示地址
- 調用f,並把整數100複製給f地址的內存並用a作為符號標示
- 輸出符號a儲存的數據
- 釋放符號a使用的內存
-
但…如果是下面這樣的情況呢
function f(text, i) { console.log(text.charAt(i)); } var text = 'Here is a Long long text .........'; f(text, 0); f(text, 1); f(text, 2); f(text, 3); f(text, 4); f(text, 5);
那怎麼辦呢?
-
善用JS的Object
-
example
const o = (object, i) => { console.log(object.text.chatAt(i)); }; const object = { text : ‘Here is a Long long text …’, }; f(object, 0); f(object, 1); f(object, 2); …
-
這樣我們就只是複製 o 一個64位元的內存,比起整個文本差多了吧!!!
關於語法
-
你可以寫
define(f (lambda (x y g) (g x y))) define(g (lambda (x y) (+ x y))) (f (1 2 g))
-
妳也可以寫較容易辨識的
const f = (x, y, g) => { return g(x, y); } const g = (x, y) => { return x + y; } f(1, 2, g);
-
機制一樣,任君選擇
關於使用方式
-
example
const parse = (text, f) => { let match; for(let n=0;n<text.length;n++){ match = /Hi/.exec(text); if(match === null){ break; } f(match); } }
-
這裡我們循環一個文本並用正則提取的Hi,再來如何最佳化調用呢?
-
below
const greatFun = (text) => { let a = 0, b = 1, c = 2, d = “wow”; parser(text, (match) => { let t = a + b + c; console.log(t + d); }) }
-
我們可以直接使用父函數的所有,效能就是一點一點優化的
以上是我學習Tulayang的文章,自己整理的心得