JavaScript object is returned from a function available in Chrome Dev Tools, but not from a script

EDIT

I was a little quick, the problem arises in the function, and not where I first said. Here is the function:

function returnAnObject(url) {
  var apiurl = 'http://url.com';

  var info = {};
  $.getJSON(apiurl, function(data) {
    $.extend(info, {
      a  : data.x,
      b  : data.y,
      c  : data.z
    });
  });

  console.log(info); // Shows object as usual
  console.log(info.a); // Shows undefined
  return info;
}

Is this clearer?

End edit

So, I have a little problem.

I have a function that returns a fairly simple object that looks something like this:

{
  a: 'x',
  b: 'y',
  c: 'z'
}

I save it as a variable:

var something = functionThatReturnsObject(someargument);
console.log(something); // In chrome dev tools, I see the object and its values
console.log(something.a); // This, however, logs undefined
console.log(something['a']); // This also logs undefined

Why is this? I think I'm losing my mind here, I must have missed something ...

The really strange part happens if instead

var something = functionThatReturnsObject(someargument);

I write

window.something = functionThatReturnsObject(someargument);
console.log(something); // Still works, showing the object and properties
console.log(something.a); // Still doesn't work
console.log(someting['a']); // Still doesn't work

If now I access the object directly from dev tools by typing

something; // returns object, I can see everything in it etc.
something.a // Now, for some mysterious (to me) reason, this works, returning the value of a

So, does anyone understand what is going on here?

+5
source share
1 answer

. . , ajax- , ajax- ( ). , , . . - , , .

ajax , . , , returnAnObject.

dev, ajax , - dev . , info.a returnAnObject. , ajax.

+3

All Articles