1. 程式人生 > 其它 >js用高階函式動態建立代理(代理模式之快取代理)

js用高階函式動態建立代理(代理模式之快取代理)

技術標籤:javascriptweb前端javascript前端

運用高階元件結合代理模式中的快取代理可以減少不必要的計算,舉例我們經常使用到的加減乘除法。

// 加法運算
var plus = function(){
	console.log('加法'); // TODO: 用於驗證,記得刪除
	var a = 0;
	for(var i = 0, l = arguments.length; i < l; i++){
		a = a + arguments[i];
	};
	return a;
}
// 乘法運算
var mult = function(){
	console.log('乘法'
); // TODO: 用於驗證,記得刪除 var a = 1; for(var i = 0, l = arguments.length; i < l; i++){ a = a * arguments[i]; }; return a; } // 快取代理 var proxyFunc = function(fn){ var cache = {}; return function(){ var args = Array.prototype.join.call(arguments, ','); if (args in cache){ return cache[args]; }
; return cache[args] = fn.apply(this, arguments) } } // 程式碼呼叫與驗證 var proxyPlus = proxyFunc(plus), proxyMult = proxyFunc(mult); console.log(proxyPlus(1, 2, 3, 4)); console.log(proxyPlus(1, 2, 3, 4)); console.log(proxyMult(1, 2, 3, 4)); console.log(proxyMult(1, 2, 3, 4));

執行以上程式碼,從控制檯可以看到下圖所示結果,其中‘加法’、‘乘法’只輸出了一次,也就是隻進行了一次計算,另一次則是從快取代理直接返回結果,節省了沒必要的計算。

在這裡插入圖片描述