var a = 0, b = 0;
function A(a) {
A = function(b) {
alert(a + b++)
}
alert(a++)
}
A(1);
A(2);
上面A(1)和A(2)输出为多少?为什么?
var a = 0, b = 0;
function A(a) {
A = function(b) {
alert(a + b++)
}
alert(a++)
}
A(1);
A(2);
上面A(1)和A(2)输出为多少?为什么?
第一次执行A(1),最后alert(1);
第二次执行A(2),最后alert(4);
在第一次执行的时候,先是重定义了A这个方法(并不执行),然后alert(a++),其中先输出a然后自加1,于是结果是1。这个时侯A方法变成alert(a+b++),a=2。
第二次执行的时候,执行alert(a+b++),其中a是2,b也是2,先输出了4然后b自加1成了3。
全局下的a,b没有改变,改变的是闭包的a。所以说,第二次执行取的a也不是全局的,而是A内的a。
为什么总是爱 讨论 这种奇怪的东西, 老老实实写可读性好的代码不行吗?
function A() 内部重定义了 function A()
第一次,传参 a=1,重定义A(), 然后执行 alert(a++) //alert(1), 然后 a+1 = 2
第二次 A() 已经重定义了, 参数b=2, a是第一次的结果2, 执行alert(a+b++) //alert(4), b+1 = 3
ps: F12 自己在控制台 走一遍, 看看 A 执行一次后,已经变化了
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答928 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
浏览器执行Js程序的时候,分两步:
我们来分析题目:
先预解析,预解析仓库里有:
执行代码: