我为什么要将计数器函数分配给计数变量?这样做的目的是什么?
function counter() {
var localVar = 0;
return function() {
localVar++;
return localVar;
}
}
var count = counter(); // I am confused here.
console.log(count());
我为什么要将计数器函数分配给计数变量?这样做的目的是什么?
function counter() {
var localVar = 0;
return function() {
localVar++;
return localVar;
}
}
var count = counter(); // I am confused here.
console.log(count());
counter
是一个函数工厂,当调用时它会返回一个函数。
通过将变量赋值给 counter
,您可以跟踪此计数器,并且每次调用它时,变量 localVar
将按一次递增。如果您总是调用 counter()()
,则无法跟踪该值。
示例:
function counter() {
var localVar = 0;
return function() {
localVar++;
return localVar;
}
}
var count = counter();
for(var i = 0; i<99; i++) count();
console.log(count()); // 100
for(var i = 0; i<99; i++) counter()();
console.log(counter()()); // 1
counter
函数赋值给一个变量,而是调用counter
并将其返回值赋值给变量。counter
会返回另一个函数。counter
内部有以下代码段:return function() {
localVar++;
return localVar;
}
count
是一个函数,你需要调用它来获得一个数字。count
是counter
返回的内容,而counter
返回一个函数。 - Carcigenicatecount
是一个函数,当你打印一个函数时就会看到它。你需要调用它(添加 ()
)才能从中获取数字。 - Carcigenicatefunction counter() {
var localVar = 0;
return function() {
localVar++;
return localVar;
}
}
var count = counter();
var secCount = counter();
console.log(`count: ${count()}`);
console.log(`count: ${count()}`);
console.log(`secCount: ${secCount()}`);
console.log(`secCount: ${secCount()}`);
console.log(`count: ${count()}`);
console.log(`count: ${count()}`);
console.log(`secCount: ${secCount()}`);
console.log(`secCount: ${secCount()}`);
console.log(`count: ${count()}`);
counter
是一个函数工厂,它返回一个新的函数 - 在这种情况下,是一个增加值的函数。count
。localVar
- 这也是在调用counter
时声明的 - 并且没有外部函数可以修改它,因此不存在多个函数更改同一变量的冲突。此外,这样您就可以拥有多个不会相互冲突的计数器
。
counter()
的更好名称应该是generateCounter()
。然而,这只是 JS 中闭包的一个非常糟糕的例子。如果你想了解这个函数的作用,可以研究一下闭包。比这个例子更合适的例子有很多。其中一个很好的应用是回调函数。 - c1moore