想想,学1天了 ... 却还是问题不断 ... 首先请看这个代码<html>
<body>
<meta http-equiv="content-type" content="text/html;charset=GB2312" >
<script language="javascript">
<!--
var y = "global" ;
function fun(){
var y = "nihao" ;
return new Function("return y");
}
alert(fun());
-->
</script>
</body>
</html>结果如下 :这个结果,显然不是我想要的!!!于是,我将代码进行了一点点的改动,把alert(fun())改成了alert(fun()());结果,正确了,如下 :
由于初学JS才1天,不太理解这匿名函数的规矩,所以:问题1 : 请帮我解释下上面出现这情况的原因 ?问题2:麻烦各位解释下匿名函数的规矩!注:重点是解决 问题1 !!!
谢谢
2, 匿名函数,就声明的函数没有名字,
像 var fn = function(){}; 这样就是把一个匿名函数赋值给了一个变量
至于规矩,我不太清楚,这个也没声明特别规矩把,反正‘一些事情需要马上执行,不想声明一个函数,再调用,就可以用一个匿名函数
如 $("#img_d").click(function (){alert()});就像这样, var v = 1; alert(v); 和 直接alert(1),看你喜欢那种,
首先来讲,你的回答很有帮助,谢谢你 !!!但是,我还是几个问题的,希望你能看看:请允许我把代码贴上:
//累加器:闭包作为返回值
function dwn(s)
{
document.write(s + "<br/>");
}
function add(a, b)
{
b = b || 0;
document.write(b+" ______ ");
var s = a + b;
//返回一个供进一步累加的闭包
var ret = function(a){
return add(a, s);
}
ret.valueOf = ret.toString = function(){
return s;
}
document.write("<>++++++"+ret+"+++++<>");
return ret;
}
dwn(add(5)); //5
dwn(add(5)(10)); //15
dwn(add(5)(10)(20)); //35
dwn(add(5)(10)(20)(500)(500)); //35这个代码,是我在CSDN一个blog博主这里看过来的,我有2点不明白,希望你解释下:问题1:我感觉程序是死循环,因为程序没有控制何时结束...
问题2:我注意到程序中有如下一段代码,我不解其意:
ret.valueOf = ret.toString = function(){
return s;
}
我尝试着去掉这段代码,则出现了问题,竟然输出了代码本身 !!!我又尝试着改写为:ret.valueOf = ret.toString = s ;
这样写照错不误!!!
我很是纠结,希望能指点我一下 ... 谢谢 ...
add(5)执行完,返回一个函数 (10)执行 直到 最后一个函数(500),这时返回一个函数,也就是dwn函数的参数,就执行完了。
var ret = function(a){
return add(a, s);
} 这个并不像是java的递归,它只是申明一个函数。
2, ret.valueOf = ret.toString = function(){
return s;
}
这里相当于java的重写toString()方法。如果你去掉这个代码,当然是输出那个函数本身。这个和你帖子一样。
ret.valueOf = ret.toString = s ;这样的话,你把一个int型的 变量赋值给了一个函数,
当然不行,ret.valueOf = ret.toString都是一个函数,你必须给它赋值一个函数
可是,我直接写 ret = s ; 也不行!!!
可能是我对函数对象不理解吧 ... 能否指点下,我r =s 也不行的原因 ...
还有,了解html文件,javascript执行顺序也同样很重要
于是 new Function("return y")只是得到了这个一个函数对象,就是招聘到的人。
return new Function("return y")返回的就是这个函数对象而已,但是它并没有执行。
return (new Function("return y"))();
这样把它作为一个函数对象 后面加()调用,也就是让其执行,才能达到效果。知其然,知其所以然,然后得道也。