谷歌浏览器中console.log的延迟打印问题

chrome 的控制台处于性能的考虑,对应引用类型的数据读取是存在延迟的,默认值读取一层数据,当你点击展开时,会重新去堆内存中读取属性值和下一层的数据。

这种优化,有时候会给我们一种错觉,console.log 是异步的。

问:console.log 是同步还是异步的。
答:同步的。

1.打印数组的时候

在console.log的运行中,如果将对象放进数组中,会出现延迟打印的情况

let aa = {
    num: 10
}

let ac = []
ac[0] = aa;

console.log(ac);

aa.num = 100;

console.log(ac);

在上面的例子中,同样打印ac数组,但是第一个里的数组对象却是进行赋值以后的结果,也就是说第一个数组ac和进行赋值后的数组ac打印相同

其实这是console.log的问题,发生了延迟打印,这两个ac打印的是同一个ac,都是进行计算以后的值,但是程序执行过程中还是从上往下运行,将打印ac改成打印ac.aa就能看出来



下面这个例子也是这样

function a() {
    }

a.prototype.n = 1;
console.log(a);

var b = new a();
console.log(b.n)

a.prototype.n = 2;
console.log(b.n)
console.log(a);

在n=1第一次赋值以后进行console.log打印,
会发现原型的结果和第二次赋值以后的结果一样

.两次打印a对象,里面指向的原型对象都是n=2,明明n=2的赋值在下面,结果第一打印还是出现了n=2,而不是1

这就是延时打印,是运行以后的结果,因为谷歌在浏览器性能的考虑,只有在你展开的时候才会去获取数据,结果就是第二次赋值运行以后的数据

你可能感兴趣的:(谷歌浏览器中console.log的延迟打印问题)