单个vs多个参数时Javascript函数的奇怪参数值

时间:2017-01-12 17:42:19

标签: javascript parameters arguments

如果之前有人问过,请提前致意,但我无法通过搜索找到它。

在开发者模式下观察到的输出 Firefox 50.1.0 Chrome 55.0.2883.87

**也许这就是我做错了,但不要只是在开发者模式下查看console.log,而是单击该特定console.log调用的对象的详细信息

我从学习高级JavaScript中看到了这段代码,并添加了一些console.log调用以更好地理解它。但是,我的console.log调用的输出对我来说没有意义。

我希望console.log(“p00,...)调用的输出相同,但输出会有所不同,具体取决于是否注释了第一个”返回根目录“。

当没有注释第一个“返回根”时,console.log(“p00,...)显示一个具有单个属性的对象 - 它是”name“。这是我所期望的并且有意义我

当第一个“返回根”被注释时,console.log(“p00,...)显示一个具有两个属性的对象 - 它们是”name“和”city“。 为什么会发生这种情况?

以下是Javascript代码:

function merge(root){ 
    console.log("p00, root is ", root);
    console.log("p01, arg length is ", arguments.length);
    console.log("p02, arg is ", arguments);


    // comment out this return call and see the difference
    return root; 


    for ( var i = 1; i < arguments.length; i++ ) {
        for ( var key in arguments[i] ) {
            root[key] = arguments[i][key]; 
        }
    }

    return root; 
} 

var v1 = {name: "John"};
var v2 = {city: "Boston"}; 
var merged = merge(v1, v2);
console.log("p03, merged is ", merged);

在Firefox中观察输出:

首先返回root取消注释 first return root uncommented

首先返回root评论 first return root commented

1 个答案:

答案 0 :(得分:0)

控制台为您要注销的对象提供引用。这意味着在函数运行完毕后,您将看到对象的状态。

如果要查看对象状态的快照,可以尝试将其转换为JSON。

&#13;
&#13;
// Be sure to open your real console for this
function reference(obj) {
  console.log(obj);
  obj.b = 2;
}

function json(obj) {
  console.log(JSON.stringify(obj));
  obj.b = 2;
}

reference({ a: 1 });
json({ a: 1 });
&#13;
&#13;
&#13;