关于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是计算阶乘的



哪位大大可以解释下上面的代码么。
...全文
167 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";

就可以添加属性,非常灵活。也容易出错
什么是SWFUpload?   SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统标签的文件上传模式。 [编辑本段]SWFUpload的主要特点   * 可以同时上传多个文件;   * 类似AJAX的无刷新上传;   * 可以显示上传进度;   * 良好的浏览器兼容性;   * 兼容其他JavaScript库 (例如:jQuery, Prototype等);   * 支持Flash 8和Flash 9;   SWFUpload不同于其他基于Flash构建的上传工具,它有着优雅的代码设计,开发者可以利用XHTML、CSS和JavaScript来随心所欲的定制它在浏览器下的外观;它还提供了一组简明的JavaScript事件,借助它们开发者可以方便的在文件上传过程中更新页面内容来营造各种动态效果。   在使用SWFUpload之前,请确认你具备一定的JavaScript和DOM知识。在实际开发中,大部分的错误都是由于错误的设置和低劣的Event Handlers处理程序所造成的。 [编辑本段]文档中文翻译   http://www.v-sky.com/doc/swfupload/v2.1.0/Documentation.html [编辑本段]效果演示   * Classic Form Demo http://demo.swfupload.org/formsdemo ;   * Features Demo http://demo.swfupload.org/featuresdemo ;   * Application Demo http://demo.swfupload.org/applicationdemo ;   * v1.0.2 Plugin Demo http://demo.swfupload.org/v102demo ; [编辑本段]选择合适的Flash控件   在发行包(SWFUpload v2)中含有2个版本的Flash控件(swfupload_f8.swf 与wfupload_f9.swf),其中第一个版本拥有最佳的兼容性,但是为此损失了部分功能;而第二个版本提供了一些附加的功能但是损失了兼容性。 [编辑本段]SWFUpload的初始化与配置   首先,在页面中引用SWFUpload.js ,如      然后,初始化SWFUpload ,如   var swfu;   window.onload = function () {   swfu = new SWFUpload({   upload_url : "http://www.swfupload.org/upload.php",   flash_url : "http://www.swfupload.org/swfupload_f9.swf", file_size_limit : "20480"   });   };   以下是一个标准的SWFUpload初始化设置所需的参数,你可以根据需要自己进行删减:   {   upload_url : "http://www.swfupload.org/upload.php", 处理上传请求的服务器端脚本URL   file_post_name : "Filedata", 是POST过去的$_FILES的数组名   post_params : {   "post_param_name_1" : "post_param_value_1",   "post_param_name_2" : "post_param_value_2",   "post_param_name_n" : "post_param_value_n"   },   file_types : "*.jpg;*.gif", 允许上传的文件类型   file_types_description: "Web Image Files", 文件类型描述   file_size_limit : "1024", 上传文件体积上限,单位MB   file_upload_limit : 10, 限定用户一次性最多上传多少个文件,在上传过程中,该数字会累加,如果设置为“0”,则表示没有限制   file_queue_limit : 2, 上传队列数量限制,该项通常不需设置,会根据file_upload_limit自动赋值   fl

87,991

社区成员

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

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