日期:2014-05-16 浏览次数:20334 次
function func(a, b, c) {} console.log(func.length); // 3你可以在任何时候给你的函数添加自定义的属性。
var myFunc = function (param) { if (!myFunc.cache[param]) { var result = {}; // ... expensive operation ... myFunc.cache[param] = result; } return myFunc.cache[param]; }; // cache storage myFunc.cache = {};上面这段代码假设函数只接收一个参数param并且它是基本数据类型(好比string),如果你有更多的参数和更复杂的参数,一个通用的处理办法就是去序列化(serialize)这些参数;
var myFunc = function () { var cachekey = JSON.stringify(Array.prototype.slice.call(arguments)), result; if (!myFunc.cache[cachekey]) { result = {}; // ... expensive operation ... myFunc.cache[cachekey] = result; } return myFunc.cache[cachekey]; }; // cache storage myFunc.cache = {};在序列化的时候要小心,对象的标识(identify)会丢失,如果你有两个不同的对象碰巧拥有相同的属性,它们会共享相同的缓存;
var myFunc = function (param) { var f = arguments.callee, result; if (!f.cache[param]) { result = {}; // ... expensive operation ... f.cache[param] = result; } return f.cache[param]; }; // cache storage myFunc.cache = {};