关于js的自定义函数属性的疑惑

molaifeng
领域专家: 前端开发技术领域
2012-10-10 11:41:22
晚上看犀牛书(第六版),关于函数这一节,有关‘自定义函数属性’,下面的例子,看了好久也是迷糊的


function fun2(x) {
if(isFinite(x) && x>0 && x==Math.round(x)) {
if(!(x in fun2)) //如果没有混成结果
fun2[x] = x*fun2(x-1) //计算结果并缓存
return fun2[x]; //返回缓存结果
}
else return NaN;
}
fun2[1] = 1;
console.log(fun2(3)); //6,火狐下测试的,fun2是计算阶乘的



哪位大大可以解释下上面的代码么。
...全文
159 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vidor 2012-10-11
  • 打赏
  • 举报
回复
function fun2(x) {
if(isFinite(x) && x>0 && x==Math.round(x)) {
if(!(x in fun2)) //如果没有混成结果
{
fun2[x] = x*fun2(x-1) //计算结果并缓存
console.log('fun2['+x+'] = '+fun2[x]) //递归
}
return fun2[x]; //返回缓存结果
}
else return NaN;
}
fun2[1]=1; //初始化

console.log('第1次算3!:' + fun2(3)); // 递归算 2! 和 3! 并缓存结果
console.log('第2次算3!:' + fun2(3)); // 直接查表 fun2[3]
console.log('第1次算5!:' + fun2(5)); // 递归算 4! 和 5!

// 适合频繁调用该函数的场合,每个新值求1次缓存,最终演变为查表法。

fun2.myName = 'abc'
alert(fun2['myName']==fun2.myName) // 两种访问属性的方式

// []存取的属性名可以是非规则的,fun2[1]应该是fun2["1"],但fun2.1非法。
molaifeng 2012-10-11
  • 打赏
  • 举报
回复
哦,我明白了,看来还是没有认真读好代码,现已清楚了,谢谢楼上大大们得回答!!!
hch126163 2012-10-11
  • 打赏
  • 举报
回复
js 是弱类型语言。
var obj={};
obj.name ="name";

就可以添加属性,非常灵活。也容易出错

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧