“调用函数”和“将函数存储在变量中然后调用它”有什么区别 [duplicate]

What is the difference between "calling a function" and "storing a function in variable and then calling it" [duplicate]

提问人:shivam biswas 提问时间:3/11/2021 最后编辑:shivam biswas 更新时间:3/13/2021 访问量:43

问:

我想问你一个问题,关于“调用函数”与“将相同的函数存储在变量中然后调用它之间的区别

这是一个带有闭包的简单计数器函数。

function makeCounter() {

  var count = 0;

  function counter() {

    count = count + 1;

    return count;

  }

  return counter;

}

var doCount = makeCounter();

console.log(doCount());
console.log(doCount());
console.log(doCount());

console.log(makeCounter());
console.log(makeCounter());
console.log(makeCounter());

当我们像这样使用计数器时:

console.log(doCount());
console.log(doCount());
console.log(doCount());

输出为:

1
2
3

但是当我们这样调用函数时:

console.log(makeCounter());

输出如下所示:

[Function: counter]
[Function: counter]
[Function: counter]

引擎盖下发生了什么?请解释。 谢谢。

JavaScript 节点 .js 函数 闭包

评论

0赞 GMAC 3/11/2021
在这里,您的函数实际上被调用,但如果您没有调用函数,因为您返回的不是.console.log(doCount())counter()console.log(makeCounter());counter()return counterreturn counter()
0赞 shivam biswas 3/11/2021
但是当我返回时,输出总是: 1.这不是我所期望的。输出应为 1、2、3,依此类推。return counter()
0赞 GMAC 3/12/2021
是的,这是意料之中的,因为如果您返回 count 变量不会更新,但在返回的情况下,您会更新 count 变量。这是因为在第一种情况下,doCount 每次都分别从 makeCounter() 获取值,而在第二种情况下,makeCounter() 被调用一次,计数器被调用 3 次,这更新了计数变量。counter()counter

答: 暂无答案