Javascript 返回JS/JSON函数中的变量

Javascript 返回JS/JSON函数中的变量,javascript,jquery,json,return-value,Javascript,Jquery,Json,Return Value,我试图理解JSON中的JSON、回调等。从下面经过修改的示例中,您将看到我在一个来自$.getJSON的函数回调中。然后,我跳入getSomething,并期望它改变我的结果变量。它会在函数的范围内改变它,但不会在我跳出该函数时改变它 您将从控制台2.log中看到第一个显示正确,而第二个显示不正确。我确信我的问题的答案与通过返回变量有关。回拨,但有人能告诉我: 谢谢 代码: 我猜StackOverflow.getSomething运行AJAX请求?因此,在通过a和b的回调循环中定义的内容在AJA

我试图理解JSON中的JSON、回调等。从下面经过修改的示例中,您将看到我在一个来自$.getJSON的函数回调中。然后,我跳入getSomething,并期望它改变我的结果变量。它会在函数的范围内改变它,但不会在我跳出该函数时改变它

您将从控制台2.log中看到第一个显示正确,而第二个显示不正确。我确信我的问题的答案与通过返回变量有关。回拨,但有人能告诉我:

谢谢

代码:

我猜StackOverflow.getSomething运行AJAX请求?因此,在通过a和b的回调循环中定义的内容在AJAX请求完成之前不会执行。发生的情况是,启动StackOverflow.getSomething,然后立即执行代码末尾的console.logresult。此时,StackOverflow.getSomething的回调尚未运行,结果也尚未更新。只记录样本内容。但是,当第二个console.log在getSomething的AJAX请求之后在回调中执行时,结果被更新并正确记录

换句话说,执行命令是这样的

将结果设置为样本 getSomething使用附加的回调函数触发AJAX请求 logresult记录示例内容 ajax回调完成并启动其回调函数。通过迭代a和b,相应地更新结果 回调函数的console.logresult记录结果的最终值 我猜StackOverflow.getSomething运行AJAX请求?因此,在通过a和b的回调循环中定义的内容在AJAX请求完成之前不会执行。发生的情况是,启动StackOverflow.getSomething,然后立即执行代码末尾的console.logresult。此时,StackOverflow.getSomething的回调尚未运行,结果也尚未更新。只记录样本内容。但是,当第二个console.log在getSomething的AJAX请求之后在回调中执行时,结果被更新并正确记录

换句话说,执行命令是这样的

将结果设置为样本 getSomething使用附加的回调函数触发AJAX请求 logresult记录示例内容 ajax回调完成并启动其回调函数。通过迭代a和b,相应地更新结果 回调函数的console.logresult记录结果的最终值
谢谢你的解释。我想我可能已经假设了大部分,但仍然不知道如何将getSomething的结果绑定到getJSON中,以便它在执行getJSON的其余部分之前发生。如果您依赖于正确的结果来确保getJSON的其余部分正常工作,您必须将其余的getJSON代码放入StackOverflow.getSomething的回调中:谢谢您的解释。我想我可能已经假设了大部分,但仍然不知道如何将getSomething的结果绑定到getJSON中,以便它在执行getJSON的其余部分之前发生。如果您依赖于正确的结果来确保getJSON的其余部分正常工作,您必须将其余的getJSON代码放入StackOverflow.getSomething的回调中:
$.getJSON('/cart.js', function (cart, textStatus) {
  var result = '';
  result += 'Sample Stuff';
  StackOverflow.getSomething(param1, param2, function(a, b) {
    for(j=0; j < b.length; j++) {
      if (b.options[j] != 'Default Title') {
        if (a.options[j].name.indexOf("Color") > -1) {
          result += b.options[j].name;
          console.log(result); // <-- It comes out correct (Sample Stuff + b.options...)
        }
      }
    }
  });
  console.log(result); // <-- It comes out incorrect, just (Sample Stuff)
});