<script>
var a=0,
b=0;
function A(a){
A=function(b){
alert(a+b++);
};
alert(a++);
}
A(1);
A(2);
</script>
首先为function分配一个堆内存为AAAFFF000,函数开始执行,然后在function方法体内重新了A,为A重新分配了一个内存地址BBBFFF000,但是并没有销毁原本的内存地址,形成闭包。
开始执行函数,首先A(1),传入a的值为1,然后执行alert(a++)这里输出结果为1。
然后执行A(2),此时已经重写过了A,此时2是b的值,所以执行a+b++,应该是2+2="4",然后执行b++,b变成了3,这里的A(2)上下文被销毁。