2017-01-12 13 views
1

Извините заранее, если это было задано раньше, но я не смог найти его в результатах поиска.странное значение аргумента для функции Javascript при одиночном или множественном аргументах

выход наблюдается в режиме разработчика для Firefox 50.1.0 Chrome 55.0.2883.87

** может быть, это то, что я делаю неправильно, но не просто смотреть на console.log в режиме разработчика, но также нажмите на информацию об объекте для этого конкретного вызова console.log.

Я натолкнулся на этот код с помощью Learning Advanced JavaScript, и я добавил несколько консольных вызовов, чтобы лучше понять их. Однако выходы для моих консольных вызовов не имеют для меня смысла.

Я ожидаю, что выход console.log ("p00, ...) называют такой же, но выход отличается в зависимости от того первого„обратный корень“комментируется или нет.

Когда первый «корень возврата» не комментируется, консоль.log («p00, ...) отображает объект с единственным свойством - это« имя ». Это то, что я ожидаю и имеет смысл для меня.

Когда первый «обратный корень» прокомментирован, консоль.log («p00, ...») отображает объект с двумя свойствами - они являются «именем» и «городом». Почему это происходит здесь . ??

Ниже приведен код 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:

первый обратный корень uncommente d first return root uncommented

первый обратный корень прокомментировал first return root commented

+0

изображений показывают аргумент, корень, является * же * в любом случае в первом console.log. изменяется только * last * console.log с // return - он отображает либо неизмененные, либо объединенные результаты, соответственно, что вы видите с правой стороны. – sweaver2112

+0

Спасибо за @ sweaver2112 и Mike C. – gnemnk

+1

Непонимание с моей стороны о том, как вывод отображается в Firefox и Chrome. Заключение - для console.log («p00 ...), выходы одинаковы для обоих случаев, но консоль предоставляет ссылку на объект, поэтому он покажет конечное состояние объекта, когда вы попытаетесь увидеть более подробную информацию относительно этого объекта. 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 });

 Смежные вопросы

  • Нет связанных вопросов^_^