Javascript 变量值在两个 console.log() 行之间变化

Javascript variable values changing between two console.log() lines

我正在使用 Fancytree, and I'm creating a new node using the ExtEdit extension。节点的标题(正文)似乎设置正确,但值在两个 console.log() 语句之间不断变化,错误的值被发送到服务器。

这是怎么回事?这让我很困惑。

Here's FancytreeNode API.

这是我正在使用的完整功能:

function createNode(data) {
    console.log('this is the data object');
    console.log(data);
    console.log('this is data.node.title');
    console.log(data.node.title);
    $.ajax({
        method: 'post',
        data: {
            name: data.node.title,
            parentId: data.node.parent !== undefined ? data.node.parent.key : null
        },
        url: '/my/url'
    }).success(function (thisData, status, jqXHR) {
        data.node.key = thisData.id;
    });
}

这是输出。请注意 data.node.title 的不同之处。

我是从 Nevosis 的评论中弄明白的。当使用 console.log() 记录一个对象时,它实际上并没有被评估——它只是一个 reference。导致函数触发的 Fancytree 事件有点奇怪; data.node.title 直到事件结束才设置为新值,但在那之后我才在控制台中展开对象。 data.node.title 直接记录时会被评估(因为它必须如此),这就是值不同的原因。通过在 console.log().

之后立即设置断点,我能够看到正确的 data 对象