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