[英]Function does not return the value
function Increment()
{
var counter = 100;
function inner()
{
counter += counter;
return counter;
}
}
var x = Increment();
console.log(x);
console.log(x);
console.log(x);
這是此代碼的說明 使用 JavaScript 閉包/自調用方法執行以下操作: a) 將外部 function 命名為“增量”。 b) 將 100 作為計數器存儲在外部 function 中。 c) 在內部函數中將計數器增加 100 並返回。 d) 調用“Increment” 3 次,每次將返回值存儲在一個變量中。 e) 在 web 控制台中記錄最終值(400 是第三次調用的最終值),但 function 甚至不返回第一個值。
大家能看出問題出在哪里嗎?
您應該調用“內部” function 來執行它。
並且您的增量 function 應該返回或更新計數器變量以使其生效。
您還應該在外部聲明計數器變量,以便每次調用“增量”Function 時都可以遞增它。
如果你在里面聲明它,它只會在你每次調用“增量”function 時重置。
你可以這樣做。
function Increment()
{
function inner()
{
counter += 100;
return counter;
}
return inner();
}
var counter = 100;
console.log(Increment());
console.log(Increment());
console.log(Increment());
您不僅要調用內部 function 還要返回其結果。 下面的代碼有效
var counter = 100; function Increment() { function inner() { counter += counter; return counter; } return inner(); } var x = Increment(); var y = Increment(); console.log(x); console.log(y);
內層function需要調用3次,所以需要在外層function中返回內層function並調用。
function Increment() { var counter = 100; function inner() { counter += counter; return counter; } return inner; } var x = Increment(); console.log(x()); console.log(x()); console.log(x());
如果最終值需要為 400,您可以像這樣重寫您的 function:
function Increment() { var counter = 0; function inner() { counter += counter || 100; return counter; } return inner; } var x = Increment(); console.log(x()); console.log(x()); console.log(x());
Increment()
不返回任何內容或undefined
。
如果您希望 Increment 返回 counter 的值,只需添加一個return
語句。
function Increment() {
let counter = 100;
function inner() {
counter += counter;
return counter;
}
return counter;
}
let x = Increment();
console.log(x); // 100
console.log(x); // no change, since `Increment()`
console.log(x); // was only called once
記住, inner
永遠不會被調用——如果你想讓 inner 做某事,調用inner()
。 此外,請記住, counter
是在Increment()
中聲明的,這意味着每次調用它時,都會重新聲明它(並重置為 100)
這些指令不會產生他們預期的結果。
這可能是他們真正想要的。
function Increment() { var counter = 100; function inner() { counter += 100; return counter; } return inner; } var innerFunc = Increment(); var a = innerFunc(); var b = innerFunc(); var c = innerFunc(); console.log(c);
Increment
改變了兩件事。
首先, inner
function 將計數器增加100
。 這是必需的,因為counter
發生了變化,因此counter += counter
導致counter
增加最近更新的版本。
其次, inner
function 成為Increment
的返回值。
因此,您只需調用一次Increment
,並將其結果存儲在一個變量中。 該變量包含您返回的inner
function。 現在每次調用 function 時,它都會將counter
變量增加100
並返回其新值。
這是對閉包的正確演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.