但是還有一個問題,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基礎(chǔ)的同學(xué),估計老早就想說了, 箭頭函數(shù) 就是個簡寫形式的函數(shù)表達式,并且它擁有詞法作用域的 this
值(即不會新產(chǎn)生自己作用域下的 this
, arguments
, super
和 new.target
等對象),且都是匿名的。
那怎么辦呢?嘿嘿,我們需要借助一點FP的思想了。