Javascript中匿名函数的递归调用

function(f){ console.log(f(10));})(function(n){ if (n <= 1) { return 1; } else { return n * arguments.callee(n-1); }})//output: 3628800

但是还有一个问题,MDN的文档里明确指出

警告 :在 ECMAScript 第五版 (ES5) 的 严格模式 中禁止使用 arguments.callee()。

哎呀,原来在ES5的 use strict; 中不给用啊,那么在ES6中,我们换个ES6的arrow function 写写看:

((f) => console.log(f(10)))(    (n) => n <= 1? 1: arguments.callee(n-1))//Uncaught ReferenceError: arguments is not defined(…)

有一定ES6基础的同学,估计老早就想说了, 箭头函数 就是个简写形式的函数表达式,并且它拥有词法作用域的 this 值(即不会新产生自己作用域下的 this , arguments , super 和 new.target 等对象),且都是匿名的。

那怎么办呢?嘿嘿,我们需要借助一点FP的思想了。