有人可以解释一下闭包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;
}
}());