闭包 JavaScript(简单)计数器的不同输出



有人可以解释一下闭包JS计数器的这种不同输出吗?

输出从 0 开始 的第一个代码段

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

输出从 1 开始的第二个代码段

var add = (function() {
var counter = 0;
return function() {
counter++;
return counter;
}
})();
console.log(add()); // output: 1;
console.log(add()); // output: 2;
console.log(add()); // output: 3;

为什么会这样工作?为什么第一个输出从 0 开始,第二个输出从 1 开始?谢谢。

counter++;

的++ 运算符位于后缀位置,它告诉它首先返回计数器的值,然后在之后递增。所以在你的第一个例子中,这就是发生的情况:返回 0,然后递增到 1;然后返回 1,然后递增到 2,依此类推。

在第二个示例中,counter++仍然首先返回,然后递增,但并不关心增量操作的返回值,因为该行代码没有左侧。然后后面的一行将返回现在递增的值。

也可以在前缀位置使用 ++,在这种情况下,它将首先递增,然后返回。您可以使用它将第一个示例修改为输出 1、2、3。

const counter = (function() {
let count = 0;
return function() {
return ++count; //<--- changed to prefix
}
}());
console.log(counter()); // output: 1
console.log(counter()); // output: 2
console.log(counter()); // output: 3

第一个片段

return count++;

相当于:

temp = count;
count = count + 1;
return temp;

所以它从 0 开始

第二个片段

count++;
return count;

相当于:

temp = count;
count = count + 1;
return count;

所以它的初始值是 1;

预增量

const counter = (function() {
let count = 0;
return function() {
return ++count;
}
}());

这导致首先增加 count 的值,然后返回其值 这与:

const counter = (function() {
let count = 0;
return function() {
count = count + 1;
return count;
}
}());

岗位递增

const counter = (function() {
let count = 0;
return function() {
return count++;
}
}());

这导致首先增加 count 的值,然后返回其值 这与:

const counter = (function() {
let count = 0;
return function() {
temp = count;
count = count + 1;
return temp;
}
}());

相关内容

最新更新