从Chrome开发工具中可用的函数返回的JavaScript对象,但不是从脚本返回的

从Chrome开发工具中可用的函数返回的JavaScript对象,但不是从脚本返回的,javascript,Javascript,编辑 我有点快,问题出现在函数中,而不是我第一次说的地方。以下是函数: 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 }); }); c

编辑

我有点快,问题出现在函数中,而不是我第一次说的地方。以下是函数:

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;
}
这是否更清楚

结束编辑

好吧,我有个小问题

我有一个函数,它返回一个相当简单的对象,如下所示:

{
  a: 'x',
  b: 'y',
  c: 'z'
}
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
我将其保存到如下变量:

{
  a: 'x',
  b: 'y',
  c: 'z'
}
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
为什么会这样?我想我快疯了,我一定是忽略了什么

如果不是,而是

var something = functionThatReturnsObject(someargument);
我写

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
如果我现在直接从开发工具访问对象,输入

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

那么,有人知道这里发生了什么吗?

正如我所怀疑的那样。您正在成功处理程序中为异步函数调用分配信息。成功处理程序直到ajax调用完成后才执行,但您的函数在ajax调用开始后(以及在它完成并成功之前)立即返回。你可能不相信,但这是我今天第四次回答完全相同的问题。这是一个很常见的错误。由于内联成功处理程序,看起来这一切都发生在主函数内部,但实际上,它发生在该函数完成很久之后

在调用成功处理程序之前,不能使用ajax调用的返回结果。如果要将该结果传递给后续代码,则必须从成功处理程序调用该后续代码,而不是在returnAnObject函数调用后继续


它在开发工具中工作,因为ajax调用在您向开发工具中键入任何内容或查看时完成。但是,在returnAnObject函数的末尾,info.a不可用。只有在调用ajax函数的成功处理程序时,它才可用。

您可能需要向我们展示返回值的函数和变量的真实定义,以便我们了解错误所在。这可能是一个范围问题,我们只能从实际代码中看到。dev工具的作用域可能与执行代码的作用域稍有不同。@jfriend00实际上您是对的,问题出现在函数中,而不是我首先说的地方。我将编辑这个问题。@jfriend00函数现在添加了看起来是这样的内容,谢谢!从成功处理程序调用后续代码会破坏我的应用程序的流程,但我必须设法解决这个问题。。。再次感谢!异步调用通常会使应用程序的流程更加困难(它们的缺点)。但是,他们也允许你在他们完成任务的同时做其他事情(他们的优势)。