小白请教一个原生 js 代码的问题

2017-11-24 17:03:45 +08:00
 guanchyan
源代码是这样的:
function r(x){
return x;
}

function f(x){
x[0]=x[0]+">";
return x;
}

function o(){
var temp=r;
r=function(){
var c=temp.apply(this,f(arguments));
console.log(c);
return c;
}
}

function a(){
o();
alert(r("="));
}

for(var i=0;i<10;i++){
a();
}
我不能理解的是,第 n 次执行 a()的时候,控制台为什么会输出 n 行同样的语句。
(如第三次调用 a()的时候,输出了 3 行“=>>>”)。
恳请各位不吝赐教,再次多谢了~
PS:我知道 apply 函数改变了 r 的结构,但是我不太清楚改变之后 r 的结构变成什么样子,如果大家能告诉我第二次执行 a ()之后 r 的具体结构就更好了。
2146 次点击
所在节点    JavaScript
4 条回复
yulitian888
2017-11-24 17:29:11 +08:00
F12,断点,单步执行
这么说可以吗?
guanchyan
2017-11-24 21:04:15 +08:00
@yulitian888 我试过啦,看的很迷惑。能详细说明下吗?特别是第二次调用的过程。万分感谢。
crz
2017-11-24 21:23:01 +08:00
@guanchyan 看 function o,每次执行的时候都会在 function r 外面包裹一层(一句 console 及返回参数),然后就越累越多啦
guanchyan
2017-11-24 22:30:02 +08:00
@crz 嗯呐,我终于看懂了。感谢指点 QAQ。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/409281

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX