在本文末尾的代码中,变量 pPrice
是通过以下方式定义的
$(addProduct).attr(attrProductPrice);
然后通过 JSON 调用进行设置
$.getJSON(url, function(data) { console.log(data); pPrice = data.price; });
但在同步 .getJSON
调用之后,该值已返回其原始值。
如何通过 .getJSON
调用覆盖词法作用域变量的定义?源代码相关部分缩写为:
function addToCart(i,qty){
var pPrice = $(addProduct).attr(attrProductPrice); //original value
var url = '/pricefor/' + pId;
$.getJSON(url, function(data) { console.log(data); pPrice = data.price; }); // new value
console.log(pPrice); // new value lost! back to original value?!
}
最佳答案
getJSON
调用是异步的。在从服务器检索 JSON 之前,不会调用您的函数。时间线如下所示:
var pPrice = $(addProduct).attr(attrProductPrice);
var url = '/pricefor/' + pId;
$.getJSON(url, blah blah);
console.log(pPrice);
# some time later, when the server responds, your function is called.
console.log(data); pPrice = data.price;
关于javascript - 词法作用域变量在 getJSON 调用中被覆盖后保留值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476355/