请问有人可以告诉我闭包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开始?谢谢。
答案 0 :(得分:2)
counter++;
在后缀位置有++运算符,它告诉它先返回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
答案 1 :(得分:0)
第一个代码段
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;
}
}());