日期:2014-05-16 浏览次数:20447 次
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 = {};