Javascript中匿名函數(shù)的遞歸調(diào)用
不管是什么編程語(yǔ)言,相信稍微寫(xiě)過(guò)幾行代碼的同學(xué),對(duì)遞歸都不會(huì)陌生。 以一個(gè)簡(jiǎn)單的階乘計(jì)算為例:
function factorial(n) { if (n <= 1) { return 1; } else { return n * factorial(n-1); }}
我們可以看出,遞歸就是在函數(shù)內(nèi)部調(diào)用對(duì)自身的調(diào)用。 那么問(wèn)題來(lái)了,我們知道在Javascript中,有一類函數(shù)叫做匿名函數(shù),沒(méi)有名稱,怎么調(diào)用呢?當(dāng)然你可以說(shuō),可以把匿名函數(shù)賦值給一個(gè)常量:
const factorial = function(n){ if (n <= 1) { return 1; } else { return n * factorial(n-1); }}
這當(dāng)然是可以的。但是對(duì)于一些像,函數(shù)編寫(xiě)時(shí)并不知道自己將要賦值給一個(gè)明確的變量的情況時(shí),就會(huì)遇到麻煩了。如:
(function(f){ f(10);})(function(n){ if (n <= 1) { return 1; } else { return n * factorial(n-1);//太依賴于上下文變量名 }})//Uncaught ReferenceError: factorial is not defined(…)