javascript - 高阶函数中count++和count+1的区别
问题描述
示例 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 ,那么为什么上面两个例子有区别。我知道它与关闭属性和提升有关。但是完全理解。你们能帮忙吗。
注意:如果没有意义,请告诉我是否应该更改问题的标题。
解决方案
表达式count++
计算count
,加 1,将结果存储在 中count
,但总体结果( 的净值count++
)是 的原始值count
。
表达式count + 1
求值count
,加 1,然后返回结果。的值count
没有改变。
有趣的是,虽然可以++count
用另一种表达方式来模拟(预增量)
var inc = (count += 1);
真的没有办法(我能想到)在count++
不使用函数的情况下干净地模仿,因为没有绕过对临时存储位置的需求:
var inc = () => { let tmp = count; count += 1; return tmp }();
后增量的运算符语义++
可以追溯到 1970 年代甚至更早的 C,并且已被包括 JavaScript 在内的许多其他语言复制。民间传说(我记得,作为一个老人)认为,前增量和后增量运算符的灵感来自于 DEC PDP-11 指令集中可用的寻址模式,但这对我来说似乎总是不太可能。
推荐阅读
- python-3.x - 将 Python 蓝牙套接字绑定到虚拟端口
- node.js - 当id包含“/”时如何通过id使用GET
- swift - 迅速。苹果系统。从扬声器录制声音
- visual-studio-code - 如何在 monaco-editor 中使用 VSC 主题?
- android - 我如何解密多次加密的字符串到Android中的以下代码?
- javascript - 为什么不重新定义元素显示属性?
- python - Python 编码问题 - 切片和字典
- tesseract - 为 Tesseract 指定脚本语言
- tsql - SQL 只删除不与外部约束冲突的记录
- javascript - TypeError: this.func 不是 Node.js 中的函数