先让我热热身,写一个递归的函数是来计算n的阶乘.不出意外,它应该是这个样子:
function factorial (n) {
if (n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
这也太简单了吧,我要增加一点难度,只准使用匿名函数.
哼哼,so easy.
function (n) {
if (n == 1) {
return 1;
} else {
return n * this(n - 1);
}
}
然后我就想,如果不使用 this 关键字,有没办法呢?我眉头一皱
但俗话说的好,再狡猾的猎人也斗不过一只好狐狸啊!我略一思索,不肖片刻便行云流水般写下如下代码:
(function(n,factorial) { //求n的阶乘 n = 5
if (n == 1) {
return 1;
} else {
return n * factorial(n - 1, factorial);
}
})(5,function(n,factorial) {
if (n == 1) {
return 1;
} else {
return n * factorial(n - 1, factorial);
}
})
站在公司新发的工程学座椅上,品一口82年的java
随后志得意满的对旁边工位的jack说,"jack,你看我这一手js代码写 得如何啊?"
jack连眼皮都没抬一下,只轻轻说了句"这么丑的代码也好意思拿出来 给别 人看?",然后就继续睡觉了.
我刚想反驳,却突然觉得这家伙说的好有道理啊(⊙o⊙)!
在敲坏37个回车键之后,我终于写出了如下代码
(function(n,factorial) { //求n的阶乘 n = 5
return factorial(n, factorial);
})(5,function(n,factorial) {
if (n == 1) {
return 1;
} else {
return n * factorial(n - 1, factorial);
}
})
又报废了两个回车键
(function (n) {
return (function(n,factorial) {
return factorial(n,factorial);
})(n ,function(n,factorial) {
if (n == 1) {
return 1;
} else {
return n * factorial(n - 1, factorial);
}
})
})(5)
这时恰逢cto路过!
于是
(function (requireRecFun) {//将需要递归的函数传进去即可.
return function (n){return requireRecFun(n,requireRecFun)};
})(function(n,factorial) {
if (n == 1) {
return 1;
} else {
return n * factorial(n - 1,factorial);
}
})(5)