在JS / JSON函数中返回变量

时间:2010-07-30 20:10:41

标签: javascript jquery json return-value

我正在尝试理解JS中的JSON,回调等。从下面的改变示例中,您将看到我正在使用$ .getJSON进行函数回调。然后,我跳进getSomething()并期望它改变我的结果变量。它在函数范围内改变它,但是当我跳出该函数时不会改变它。

你会从2 console.log()看到第一个显示正确,第二个没有。我确定我的问题的答案与通过返回变量有关。回调,但有人可以启发我:)

谢谢!

CODE:

$.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)
});

1 个答案:

答案 0 :(得分:0)

我猜StackOverflow.getSomething()运行AJAX请求?因此,在AJAX请求完成之前,不会执行在其内部定义的回调(循环遍历ab)。发生的事情是StackOverflow.getSomething被触发,然后在代码结束时console.log(result)被立即执行。到那时,StackOverflow.getSomething的回调尚未运行,result尚未更新。仅记录“样本内容”。但是当在AJAX请求(getSomething)之后在回调中执行第二个console.log时,result会更新并“正确”记录。

换句话说,执行顺序就是这个

  1. result设为“示例内容”
  2. StackOverflow.getSomething()使用附加的回调函数激发AJAX请求
  3. console.log(result)记录“样本内容”
  4. ajax回调完成并触发其回调函数。通过迭代resulta
  5. 相应地更新b
  6. 回调函数console.log(result)记录result
  7. 的最终值