我正在尝试理解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)
});
答案 0 :(得分:0)
我猜StackOverflow.getSomething()
运行AJAX请求?因此,在AJAX请求完成之前,不会执行在其内部定义的回调(循环遍历a
和b
)。发生的事情是StackOverflow.getSomething
被触发,然后在代码结束时console.log(result)
被立即执行。到那时,StackOverflow.getSomething
的回调尚未运行,result
尚未更新。仅记录“样本内容”。但是当在AJAX请求(getSomething
)之后在回调中执行第二个console.log时,result
会更新并“正确”记录。
换句话说,执行顺序就是这个
result
设为“示例内容”StackOverflow.getSomething()
使用附加的回调函数激发AJAX请求console.log(result)
记录“样本内容”result
和a
b
console.log(result)
记录result