curry,uncurry,throttle,time_chunk,lazy_load,
curry
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| function currying(fn) { var args = [];
return function() { if (arguments.length === 0) { return fn.apply(this, args); } else { [].push.apply(args, arguments); return arguments.callee; } } }
var add = (function() { var sum = 0; return function() { for (var i = 0; i < arguments.length; i++) { sum += arguments[i]; } return sum; } }());
var curryAdd = currying(add); curryAdd(1)(2); console.log(curryAdd());
|
uncurry
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Function.prototype.uncurrying = function() { var _this = this; return function() { var obj = [].shift.call(arguments); return _this.apply(obj, arguments); } };
Function.prototype.uncurrying = function() { var _this = this; return function() { return Function.prototype.call.apply(_this, arguments); } };
var push = [].push.uncurrying(); var obj = { length: 1, 0: 0 }; push(obj, 2);
console.log(obj);
|
throttle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| var throttle = function(fn, interval) { var _fn = fn; var isFirst = true; var timer = null;
return function() { var args = arguments; var _this = this;
if (isFirst) { _fn.apply(_this, args); return isFirst = false; }
if (timer) { return false; }
timer = setTimeout(function() { clearTimeout(timer); timer = null; _fn.apply(_this, args); }, interval || 500); } };
window.onresize = throttle(function() { console.log(1); });
|
time_chunk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
var timeChunk = function(arr, fn, count, interval) { var t;
var start = function() { var obj; for (var i = 0; i < Math.min(count || 1, arr.length); i++) { obj = arr.shift(); fn(obj); } };
return function() { t = setInterval(function() { if (arr.length === 0) { return clearInterval(t); }
start(); }, interval || 200); } };
var arr =[]; for (var i = 0; i < 1000; i++) { arr.push(i); }
var renderFrindsList = timeChunk(arr, function(n) { var div = document.createElement('div'); div.innerHTML = n; document.body.appendChild(div); }, 8);
renderFrindsList();
|
lazy_load
1 2 3 4 5 6 7 8 9 10 11 12 13
| var addEven = function(ele, type, handler) { if(window.addEventListener) { addEven = function(ele, type, handler) { ele.addEventListener(type, handler, false); } } else if (window.attachEvent) { addEven = function(ele, type, handler) { ele.attachEvent('on' + type, handler); } } addEven(ele, type, handler); };
|
参考文档
- 实体书:
JavaScript设计模式与开发实践(曾探)
文章若有纰漏请大家补充指正,谢谢~~
http://blog.xinshangshangxin.com SHANG殇