gpt4 book ai didi

JavaScript 执行返回函数的函数

转载 作者:行者123 更新时间:2023-11-29 10:49:23 26 4
gpt4 key购买 nike

我有以下两个计数器函数,它们在运行时返回不同的结果。

在第一个代码片段中,计数器函数被分配给变量 letsCount,看起来执行该函数会更新计数器函数中的 var 计数。

但是在第二个片段中,直接执行函数不会更新计数变量。

请您解释一下为什么它们有不同的结果,以及当返回函数的函数被赋值给一个变量时会发生什么?

片段 1

function counter() {
var count = 0;
return function() {
console.log(count++);
}
}
var letsCount = counter();
letsCount(); // 0
letsCount(); // 1
letsCount(); // 2

片段 2

function counter() {
var count = 0;
return function() {
console.log(count++);
}
}
counter()(); // 0
counter()(); // 0
counter()(); // 0

最佳答案

每次调用 counter() 时,您都会创建一个新的匿名函数实例,它有自己的作用域变量。如果你想继续使用相同的功能,你将不得不做这样的事情:

var counter = (function () {
var count = 0;

var fn = function() {
console.log(count++);
};

return function () {
return fn;
};
})();

counter()(); // 0
counter()(); // 1
counter()(); // 2

将创建一个匿名函数,然后将其存储在作用域 fn 函数中,然后我们返回一个函数,该函数在被调用时将返回 fn 保存的值。

关于JavaScript 执行返回函数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13408444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com