console.log 何时执行?

7

我试图使用console.log来调试一些非常简单的JavaScript代码,但它输出的变量值是在console.log调用之后才被更改的,对于那些是类成员变量的情况也是如此(Chrome 22,Firefox 16)。

我期望发生的事情的一个例子是这样的:

var a = 1;
console.log(a);
a += 20;

//console output says a is 1

但是如果变量是“类”成员:

var a = new myClass(1);
console.log(a);
a.x += 20;

//console output says a.x is 21

如果控制台在调用日志时不记录该值的存在,则它最终何时决定记录该值,我该如何解决这个问题?

fwiw这是整个代码:

function myClass() {
    myClass.myClass.apply(this, arguments);
    if (this.constructor === myClass) this.myClass.apply(this, arguments);
};
myClass.myClass = function () {};
myClass.prototype.myClass = function (x_) {
    if (x_ === undefined) x_ = 0;
    this.x = x_;
}

var a = new myClass(1);
console.log(a);
a.x += 20;
1个回答

9

立即执行,但是在控制台手动展开对象时获取对象状态,而不是在记录日志的时间。

当您在控制台中展开它时,添加20的代码已经执行了很长一段时间(相对而言),并且它显示为x: 21


那在Chrome上几乎有点明白,我必须手动展开它。对于FF来说,它已经展开了,结果也是一样的...现在我看到右边有一堆相关的问题,但在我输入问题时并没有显示为建议 - 看起来答案是将对象转换为字符串。我真的认为给这个函数取名为'log'是一个糟糕的选择,因为日志通常是过去事件和状态的记录。至少我不会浪费一个小时来弄清楚到底发生了什么。尽管如此,问题已解决,谢谢! - iforce2d
在Chrome控制台中,默认情况下不会完全显示大型对象。有一个小三角形图标,您可以单击它来展开日志条目并查看完整的详细信息。 - iforce2d
@iforce2d 目前的 FF 行为与 2019 年 3 月的 Chrome 类似。 - shivangg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接