繁体   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