Ama*_*ngh 2 javascript variables scope
例1
function makeCounter() {
let count = 0;
return function() {
return count++;
};
}
let counter = makeCounter();
alert( counter() );
alert( counter() );
Run Code Online (Sandbox Code Playgroud)
高于警报0和1.
例2
function makeCounter() {
let count = 0;
return function() {
return count+1;
};
}
let counter = makeCounter();
alert( counter() );
alert( counter() );
Run Code Online (Sandbox Code Playgroud)
这分别警告1和1
在编程计数中,++相当于count + 1,那么为什么在上面两个例子中有所区别.我知道它与封闭属性和吊装相关的东西.但完全理解.你们能帮忙吗?
注意:如果没有意义,请告诉我是否应该更改问题的标题.
表达式count++
求值count
,加1,存储结果count
,但总结果(净值count++
)是原始值count
.
表达式count + 1
求值count
,加1,并返回结果.值count
不会改变.
有趣的是,虽然可以++count
使用替代表达式来模仿(预增量)
var inc = (count += 1);
Run Code Online (Sandbox Code Playgroud)
在count++
没有使用函数的情况下,我真的没办法(我能想到)干净地模仿,因为没有需要一个临时存储位置:
var inc = () => { let tmp = count; count += 1; return tmp }();
Run Code Online (Sandbox Code Playgroud)
++
在20世纪70年代和可能更早的时候,C 的后增量日期的运算符语义被许多其他语言(包括JavaScript)复制.民间传说(我记得它是一个老人)认为增量前和增量后的操作者都受到了DEC PDP-11指令集中可用模式的启发,但这对我来说似乎总是不太可能.