<script>function r(x){
return x;
}
function f(x){
x[0]=x[0]+">";
return x;
}
function o(){
var temp=r;
r=function(){
return temp.apply(this,f(arguments));
}
}
function a(){
o();
alert(r("="));}
for(var i=0;i<10;i++){
a();
}</script>
疑点:为什么for循环第n次循环,f()函数就被调用了n次?
return x;
}
function f(x){
x[0]=x[0]+">";
return x;
}
function o(){
var temp=r;
r=function(){
return temp.apply(this,f(arguments));
}
}
function a(){
o();
alert(r("="));}
for(var i=0;i<10;i++){
a();
}</script>
疑点:为什么for循环第n次循环,f()函数就被调用了n次?
解决方案 »
- JS可以控制从新窗口弹出吗?(有像百度下拉的功能)
- 怎么用Ext Designer生成的代码显示到html或jsp上?
- 怎样删除从光标到最后或最前的文本?
- 如果使用body onload 或者 window.onload 就不能用document.body.innerHTML.s2t()
- INPUT IMAGE的边框如何去除?
- 如何判断ie中是否已经安装简体字库
- 高手指教:在javascript中,这样使用相对路径怎么不行?急!!!
- JavaScript的BUG吗?请专家释疑!
- ■■请教:能否点击网页上的任何控件,可以提示出该控件对象的名字或id?■■
- 哪位能不能提供一点javascript的电子书?谢谢!
- js初学者应该如何学习,大家推荐一些好的学习资料
- 如何在script中调用含参数的java函数
a();),a()函数调用o()函数(function a(){
o();
alert(r("="));}),o()函数调用f(arguments)函数啊(return temp.apply(this,f(arguments)))
temp被指向了function(x){
return x;
}r被指向了function(){
return temp.apply(this,f(arguments));
}
然后alert了r("=")的返回值 r中又调用了f
然后 你懂得
for循环第一次时,f()函数就执行1次
for循环第二次时,f()函数就执行2次
for循环第三次时,f()函数就执行3次
for循环第四次时,f()函数就执行4次
for循环第五次时,f()函数就执行5次
for循环第六次时,f()函数就执行6次
......
for循环第十次时,f()函数就执行10次这段代码运行完,f()函数总过执行了1+2+3+4+5+6+7+8+9+10=55次
temp = r //循环一次
temp = function(){return temp.apply(this,arguments)} //循环二次temp的递归调用
function r(x){
return x;
}function f(x){
x[0]=x[0]+">";
return x[0];
}function o(){
var temp=r;
r =function(){
/*返回temp函数的执行结果,比如第一次返回的结果就是f(arguments),第二次的时候是将f(arguments)作为参数传入temp(f(arguments)),此时arguments == f(arguments),这样就执行了2次f,一次类推*/
return temp(f(arguments));
}
}
function a(){
o();
alert(r("="));
}
for(var i=0;i<10;i++){
a();
}那这样写能看明白不?
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
</head>
<body>
<script>
function r(x){
return x;
}
function f(x){
x[0]=x[0]+">";
return x;
}
function o(){
var temp=r;
r=function(){
var args = f(arguments);
document.write("  temp: "+temp+"<br/>");
return temp.apply(this,args);
}
}
function a(){
o();
r("=");
//alert(r("="));
}
for(var i=0;i<10;i++){
document.write("循环第"+(i+1)+"次:<br/>");
a();
}</script>
</body>
</html>
其实说白了这段代码用到的是一个闭包问题,重写扣的函数r中的temp,每次调用都是不一样的值。