示例1
function makeCounter() {
let count = 0;
return function() {
return count++;
};
}
let counter = makeCounter();
alert( counter() );
alert( counter() );
分别高于警报0和1。
示例2
function makeCounter() {
let count = 0;
return function() {
return count+1;
};
}
let counter = makeCounter();
alert( counter() );
alert( counter() );
这将分别提醒1和1
在编程中,count ++等同于count + 1,那么为什么上面两个示例有所不同。我知道它与关闭属性和吊装有关。但是完全理解。你们能帮忙吗?
注意:如果问题没有道理,请让我知道是否应该更改标题。
答案 0 :(得分:6)
表达式count++
的计算结果为count
,加1,将结果存储在count
中,但是总结果(count++
的净值)为 {1>}的原始值。
表达式count
计算count + 1
,加1,然后返回结果。 count
的值不变。
有趣的是,虽然可以使用替代表达式模仿count
(预递增)
++count
实际上(我能想到)没有使用函数就干净地模仿var inc = (count += 1);
的方法,因为没有必要解决临时存储位置的问题:
count++
后递增var inc = () => { let tmp = count; count += 1; return tmp }();
的运算符语义可追溯到1970年代(可能更早)的C语言,并已被许多其他语言(包括JavaScript)复制。民俗学(我记得是个老人)认为,增量前和增量后运算符的灵感来自DEC PDP-11指令集中可用的寻址模式,但在我看来这似乎一直不太可能。
答案 1 :(得分:3)
在您的第一个示例中,您要进行帖子递增,即在声明和使用后加1。如果您使用++ count(预递增),则警报中将得到1和2。
在第二个示例中,您没有将count + 1的值存储回count中,因此第二次,count仍然为0,并且您再次获得相同的结果。