2017-01-12 5 views
1

前に申し訳ありませんが、私の検索からそれを見つけることができなかった場合は、事前に申し訳ありません。 ** Firefoxの50.1.0 クローム55.0.2883.87単数対複数の引数の場合のJavascript関数の奇妙な引数の値

のための開発者モードで観察

出力は多分これは、私が間違ってやっているが、ちょうど開発者モードではconsole.logを見ていないものです特定のconsole.logコールのオブジェクトの詳細をクリックしてください

私はLearning Advanced JavaScriptからこのコードを見つけました。これをより良く理解するためにconsole.log呼び出しを追加しました。しかし、私のconsole.log呼び出しの出力は意味をなさない。

は私がにconsole.logの出力を期待する( "P00は、...)と同じであることを呼び出しますが、出力が最初かどうかに応じて異なる『リターン・ルート』はコメントしたりされていません。

最初の "return root"がコメントされていない場合、console.log( "p00、...)は" name "という1つのプロパティを持つObjectを表示します。これは私が期待し、私には意味をなさないものです。

console.log( "p00、...)は、" name "と" city "という2つのプロパティを持つオブジェクトを表示します。 なぜここで起こっているのですか? 。??

以下

はJavascriptコードです:Firefoxで

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); 

観測出力:

最初のリターンルートuncommente D first return root uncommented

最初の戻りのルートは、コンソールを使用して、ログアウトしているオブジェクトへの参照を提供 first return root commented

+0

あなたのイメージは、引数、ルートを表示し、最初にconsole.logにおけるいずれかの方法* *同じです。 * last * console.logだけが//リターンで変更されます - 右側に表示されている変更されていない結果またはマージされた結果がそれぞれ表示されます。 – sweaver2112

+0

@ sweaver2112とMike C.にお越しいただきました。 – gnemnk

+1

FirefoxとChromeで出力がどのように表示されるのかについて、誤解されました。 結論 - console.log( "p00 ..."の場合、出力はどちらの場合も同じですが、consoleはObjectへの参照を提供するため、詳細を表示しようとするとObjectの最終状態が表示されますそのオブジェクトに関するJSON.stringifyは、オブジェクトのスナップショットを見るための素晴らしい提案でした。 – gnemnk

答えて

0

をコメントしました。これは、の機能が終了した後にオブジェクトの状態が表示されていることを意味します。

オブジェクトの状態のスナップショットを表示するには、オブジェクトの状態をJSONに変換してみます。

// 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 });