一个JS问题,请高手指点! add是对象,ret是他的方法,该方法返回一个add对象 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 估计你的最后一句 alert(add(5)(100)(100)(1)); 有误 这个代码还是有些意思的,我未必能解释清楚也未必对,你仅当参考吧。我不知道你有没有数据结构方面的知识,如果有的话就好理解了。在javascript中其实所有的对象都是以类似hash表的形式来存在的,因此它允许我们可以对对象添加和删除属性(当然添加的属性也是一个对象,因此也是一个hash,所以你可以无限迭代),比如var obj={};obj.name="your name";obj.age=23;alert(obj.name);delete obj.name;alert(obj.name);Function 是javascript内置的对象自身具有属性和特性,比如可以执行并且返回执行结果等等,可是他也同样符合javascript中对象的一些共性:可以对对象添加和删除属性(注:一些内部属性无法删除和添加,比如你无法删除和添加执行特性),我们用一个例子可以证明:function myFunc(){ return "我被执行了";}myFunc.show=function(){ alert("123");}myFunc.funName="我的名字:myFunc"myFunc.show();alert(myFunc());alert(myFunc.funName);delete myFunc.funNamealert(myFunc.funName);好了有了上面的交代以后也就比较容易理解这段程序了,他的返回结果是一个函数,并且是一个添加了两个方法valueOf、toString的函数,这也就是为什么你可以这样写了add(5)(100),因为add(5)的执行结果返回的就是一个函数.这里边还有一些细节需要解释,请看下一帖吧,要不出点故障就白写了先保存下 怎么没反应了呀,xingqiliudehuanghun 走了吗?我一直在按F5 接上一帖上面我们提到了javascript中对象的类似hash表的性质,以及对程序的一点分析,返回结果是一函数。仔细看下返回的这个函数会发现有些特别function add(a,b){ b=b||0; var s=a+b; var ret =function(aa){ return add(aa,s)//注意这个S } ......这个S是返回的函数的函数体中所没有定义的是在返回函数体之外存在的。在c语言和java这些语言中这种用法绝对是不允许的,因为函数一旦执行后其内部的变量就会被回收掉,这是其他地方再引用这些变量肯定会出错的。但是javascript与java不一样它是动态语言,它对变量的管理符合函数式语言的特性:1.函数是数据,2.函数可以存储数据,3.并且函数执行完之后内部变量保持函数执行最终状态不重置,而函数存储数据的场所叫做必包(可能不是很准确,你可以查一下有关必包的知识),4.必包只有在没有其他人引用的时候才会被回收。 好了交代了一些技术点之后我们来分析下alert(add(5)(100)(100)(1))这个程序是如何运行的1.add(5) 返回一个添加了自定义函数的函数,建立一个必包因为返回的函数需要使用局部变量S2.add(5)(100) 执行add(5)步返回的函数,以输入的100和add(5)函数必包中的变量s最为实参执行函数 add,再返回一添加了自定义函数的函数,并且再建立以必包保存s,因为返回的函数还要用......好了这就是这个函数的整个执行过程,不知道谁设计的程序包括了这么多javascript语言的特性,很适合做教学的例子,虽然比较难懂一些,而且效率也很低 求助: 我怎么定位控置位 编写了一个网页 为什么javascript就是不管用 求帮助 谢谢 关于html text背景色的修改 页面无法提交! 请大家帮我看下! 大家帮我解释段JS代码..谢谢.. 有什么工具可以在网页运行的时候修改JS代码的? 一个棘手的问题(关于子窗口与父窗口) open是打开窗口,如何让要open的页面在本页打开 如何用比较高端的方法通过选择不同的下拉文本框的值显示不同的文本框 一个js的折叠问题 JavaScript问题?
我不知道你有没有数据结构方面的知识,如果有的话就好理解了。
在javascript中其实所有的对象都是以类似hash表的形式来存在的,因此它允许我们可以对对象添加和删除
属性(当然添加的属性也是一个对象,因此也是一个hash,所以你可以无限迭代),比如
var obj={};
obj.name="your name";
obj.age=23;
alert(obj.name);
delete obj.name;
alert(obj.name);Function 是javascript内置的对象自身具有属性和特性,比如可以执行并且返回执行结果等等,可是他也同样
符合javascript中对象的一些共性:可以对对象添加和删除属性(注:一些内部属性无法删除和添加,比如你
无法删除和添加执行特性),我们用一个例子可以证明:function myFunc(){
return "我被执行了";
}myFunc.show=function(){
alert("123");
}myFunc.funName="我的名字:myFunc"myFunc.show();
alert(myFunc());
alert(myFunc.funName);
delete myFunc.funName
alert(myFunc.funName);好了有了上面的交代以后也就比较容易理解这段程序了,他的返回结果是一个函数,并且是一个
添加了两个方法valueOf、toString的函数,这也就是为什么你可以这样写了add(5)(100),因为
add(5)的执行结果返回的就是一个函数.这里边还有一些细节需要解释,请看下一帖吧,要不出点故障就白写了
先保存下
上面我们提到了javascript中对象的类似hash表的性质,以及对程序的一点分析,返回结果是一函数。
仔细看下返回的这个函数会发现有些特别
function add(a,b){
b=b||0;
var s=a+b;
var ret =function(aa){
return add(aa,s)//注意这个S
}
......
这个S是返回的函数的函数体中所没有定义的是在返回函数体之外存在的。在c语言和java这些语言中
这种用法绝对是不允许的,因为函数一旦执行后其内部的变量就会被回收掉,这是其他地方再引用这些
变量肯定会出错的。但是javascript与java不一样它是动态语言,它对变量的管理符合函数式语言的特性
:1.函数是数据,2.函数可以存储数据,3.并且函数执行完之后内部变量保持函数执行最终状态不重置,
而函数存储数据的场所叫做必包(可能不是很准确,你可以查一下有关必包的知识),4.必包只有在没
有其他人引用的时候才会被回收。
好了交代了一些技术点之后我们来分析下alert(add(5)(100)(100)(1))这个程序是如何运行的
1.add(5) 返回一个添加了自定义函数的函数,建立一个必包因为返回的函数需要使用局部变量S2.add(5)(100) 执行add(5)步返回的函数,以输入的100和add(5)函数必包中的变量s最为实参执行函数
add,再返回一添加了自定义函数的函数,并且再建立以必包保存s,因为返回的函数还要用
......
好了这就是这个函数的整个执行过程,不知道谁设计的程序包括了这么多javascript语言的特性,很适合做
教学的例子,虽然比较难懂一些,而且效率也很低