簡體   English   中英

函數與變量的比率的原因是什么?

[英]What is the reason for the ratio of the function to a variable?

這不起作用

 function myCounter(){ let counter = 0; function plus(){ counter++; return counter; } return plus; } console.log(myCounter()); console.log(myCounter());

但這項工作

 function myCounter(){ let counter = 0; function plus(){ counter++; return counter; } return plus; } var add = myCounter(); console.log(add());

我知道它們在語法上有所不同。 我的主要問題是:為什么單獨在 console.log 上的功能不起作用,應該歸因於一個變量

您的函數myCounter只返回一個函數引用。 它不會調用函數plus

在您的第一個示例中,您只調用函數myCounter

console.log(myCounter());

在第二個示例中,您首先調用返回函數引用的函數myCounter

var add = myCounter();

然后調用返回的函數:

console.log(add());

解決方案:

你必須改變這一行

return plus;

return plus();

這有效:

 function myCounter(){ let counter = 0; function plus(){ counter++; return counter; } return plus(); } console.log(myCounter());

在第二個例子中這一行: var add = myCounter(); 使add var 僅是對函數的引用,如果您將控制台記錄不帶括號的 add var,它將僅打印[Function] ,但console.log(add()); 使 add 函數被調用。

為了使第一個示例工作,您可以更改myCounter計數器函數的返回語句。

此代碼使myCounter僅返回plus函數引用:

function myCounter(){
    function plus(){
        //code
    }
    return  plus;
}

所以為了讓它工作,你應該調用myCounter兩次:

console.log(myCounter()());

但這使得在從console.log(myCounter())內部調用(調用) myCounter時調用plus函數:

function myCounter(){
    function plus(){
        //code
    }
    return plus();
}

你錯過了閉包的概念。 調用myCounter函數將返回另一個函數,它將在內部初始化“私有”變量counter ,因此myCounter() -> function

當然,你可以這樣調用myCounter()() ,但在這種情況下,“私有” counter變量將在每次調用時初始化為 0,並且沒有用。

解決方案是將myCounter()結果存儲在變量中並稍后調用,因此您將獲得預期的行為。

 function myCounter(){ let counter = 0; function plus(){ counter++; return counter; } return plus; } console.log(myCounter()()); console.log(myCounter()()); console.log(myCounter()()); console.log('====') var add = myCounter(); console.log(add()); console.log(add()); console.log(add());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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