4

假设我们有以下代码

var array = [1,2,3,4];
console.log(array);
array.pop();
array.pop();
console.log(array);

输出

[1,2]
[1,2]

为什么 2 个console.log()相同,第一个为什么会显示调用后计算的结果?

console.log()功能是否以某种方式或因某事“延迟”

PS:我正在使用 Sencha Touch 2.2.1 框架,但我知道,它们并没有覆盖 console.log()。我在 safari(最新版本)上运行此代码;

4

2 回答 2

4

这是一个众所周知的问题。尽管 console.log 调用以正确的顺序发生,但日志记录机制本身是基于引用的,并且在基于 Chrome 和 webkit 的系统中经常会导致这种情况。下面是一种变通方法,将其从引用更改为值。

var array = [1,2,3,4];
console.log(JSON.stringify(array));
array.pop();
array.pop();
console.log(JSON.stringify(array));

相同的缺陷:https ://code.google.com/p/chromium/issues/detail?id=50316

于 2013-08-01T18:22:56.620 回答
0

您使用的是哪种环境?如果您在 Nodejs 中执行是异步的,那么它是可能的。在浏览器控制台中,这不应该发生。事实上,我用 Chrome 和 FF 进行了测试,两种情况都得到了

var array = [1,2,3,4];

console.log(array);

array.pop(); array.pop();

console.log(array);
[1, 2, 3, 4]
[1, 2]
undefined

哪个是对的。

于 2013-08-01T18:24:02.930 回答