console.log之前的对象中的Javascript alter key

console.log之前的对象中的Javascript alter key,javascript,object,Javascript,Object,此代码的结果中出现了我无法解释的内容 var ctrl1 = { func1: function(objct){ objct.options.b = "b"; } } var ctrl2 = { myvar : {options:{a:"a"}}, func2: function(){ console.log(ctrl2.myvar); ctrl1.func1(ctrl2.myvar); }, } ctr

此代码的结果中出现了我无法解释的内容

var ctrl1 = {
    func1: function(objct){
        objct.options.b = "b";
    }
}

var ctrl2 = {
    myvar : {options:{a:"a"}},
    func2: function(){
        console.log(ctrl2.myvar);
        ctrl1.func1(ctrl2.myvar);
    },
}

ctrl2.func2();
我得到了一些结果

Object {a:"a", b:"b"}
正常情况下,它应该显示

Object {a:"a"}

在控制台中进行测试。日志可能会显示一个实时引用(无论如何在chrome中),而不是快照。如果它是“折叠的”(必须点击它来展开细节),它将继续更新


您可以通过运行代码,然后在控制台中再次修改代码并查看以前的输出来看到这一点。

console.log()方法接收对该对象的引用。要通过单击“+”在控制台中打开对象,我们需要比调用func1方法更长的时间。尝试替换console.log(ctrl2.myvar);使用console.log(JSON.stringify(ctrl2.myvar))

您的编码工作正常。它是在控制台中打印之前更新的选项

尝试以下步骤打开控制台粘贴以下代码

var ctrl1 = {
    func1: function(objct){
        objct.options.b = "b";
    }
}

var ctrl2 = {
    myvar : {options:{a:"a"}},
    func2: function(){
        console.log(ctrl2.myvar);
        debugger;
        ctrl1.func1(ctrl2.myvar);
    },
}

ctrl2.func2();
一旦代码在调试器处停止,您将在控制台中看到所需的结果,即:“a”

现在继续执行脚本。然后在控制台上写入
ctrl2.myvar
,然后您将看到a和b的更新选项。

是的,不知何故,下一行(
ctrl1.func1(ctrl2.myvar);
)正在影响
console.log(ctrl2.myvar)中打印的值