Jac*_*nkr 21 javascript arrays
function a() {
var b = ["b"];
console.log(b);
//console.log(b.slice());
b = b.push("bb");
}
a();
Run Code Online (Sandbox Code Playgroud)
在一个"完美"的世界里,你会认为它console.log
会表现出来["b"]
,但是["b", "bb"]
尽管"bb"直到事后才被推迟,但它仍然显示出来.
如果你这样做console.log(b.slice());
,你将获得所需的结果["b"]
.这是为什么?这种并发症背后的原因是什么?我只是想更好地理解这一点,所以我可以更好地避免它发生.
*注意我在最近的一个问题中遇到了同样的问题,但这是一个更简洁的例子.@RightSaidFred引领我到这一点,到目前为止一直是一个巨大的帮助.
我不认为这是一个JavaScript wtf; 我认为这是一个console.log wtf.根据我昨天看到的答案,console.log
可能会缓存你的对象.如果替换console.log(b)
为alert(b)
,您将看到b
如预期的那样显示.
不幸的是说服console.log以可预测的方式运行并不是我能得到答案的.