[英]Javascript anonymous function error
我一直在嘗試使用遞歸在javascript中使用匿名函數查找數字的總和,但出現以下錯誤:
未捕獲到的SyntaxError:意外令牌+
我想為此使用匿名函數。 誰能幫助我在這里找到我做錯了什么?
<script type="text/javascript">
console.log(function (n) {
if (n == 0) {
return 1;
}
else {
return function(n+function(n-1));
}
}(8));
</script>
您所做的事情有幾個問題。
對於初學者來說,嘗試遞歸調用函數( function(n+function(n-1))
)將導致調用堆棧大小超出錯誤,因為您將求和添加到傳遞給遞歸調用的每個參數中。 您可能想要更接近( n + function(n-1)
)的東西。
但是,這仍然是有問題的,因為您不能遞歸調用匿名函數(除非使用arguments.callee,否則在嚴格模式下是不允許的)。
要執行您想在不給函數表達式命名的情況下執行的操作,可以執行以下操作:
console.log(function(n) {
if (n == 0) {
return 1;
}
else {
return n + arguments.callee(n-1);
}
}(8))
但是,您還可以為函數表達式提供一個名稱,以供在遞歸調用中引用,這也將在嚴格模式下工作:
console.log(function foo(n) {
if (n == 0) {
return 1;
}
else {
return n + foo(n-1);
}
}(8))
編輯:在基本情況下(n == 0),如果您的目標是獲取從0到n的所有整數的和,則可能要返回0而不是1。
console.log(function fn(n) {
if (n == 0) {
return 1;
} else {
return (n + fn(n - 1));
}
}(8));
此行函數(n + function(n-1))中的錯誤,因為這是語法錯誤,所以您不能像以前那樣調用函數。 在我們的情況下,您應該添加自調用功能-名稱,並將其用於遞歸調用堆棧
當我修改匿名函數以使用正確的遞歸時,即return n + f(n-1)
,我發現只要腳本駐留在HTML頁面上,下面的代碼就可以正常工作而無需訴諸arguments.callee
。 注意:它仍然不能與console.log一起使用。
還有一件事,如果此例中的代碼試圖獲取從8到1的數字之和,則當n等於零時,對於數學上正確的和,返回值應為零,而不是一。
var f = function (n) {
if (n == 0) {
return 0;
}
else {
return n + f(n-1);
}
};
var res = f(8); // 36
請參見http://jsfiddle.net/d5k4ag8w/11/的實時示例另外, 本文還提供了一種簡單的方法,僅使用鉛筆和紙就可以算出數學:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.