簡體   English   中英

Function 不返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM