我试图访问函数范围之外的变量。我试图访问功能之外的价格。我是否必须等到请求完成,或者我无法获得价格?
var httpRequest = new XMLHttpRequest();
httpRequest.open('GET', "https://api.iextrading.com/1.0/stock/aapl/quote", true);
httpRequest.send();
httpRequest.addEventListener("readystatechange", processRequest, false);
function processRequest(e) {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
response = JSON.parse(httpRequest.responseText);
console.log(response.latestPrice);
var lastPrice = response.latestPrice;
document.getElementById("StockPrice").innerHTML = lastPrice;
price = lastPrice;
}
}
document.write("outside: " + price);
答案 0 :(得分:3)
您无法访问该函数范围之外的price
变量。您可以做的是返回价格,然后将该函数的调用分配给变量。例如:
var price = processRequest();
但是,该调用将是异步的,因此您必须从该函数内部进行document.write
调用,或者您必须设置某种承诺或回调以确保{{1仅在请求完成后调用(并且实际为document.write
分配了值)。
这看起来像是:
price
答案 1 :(得分:1)
与var httpRequest...
一起尝试设置var price = null
就你的JS文件所知,"价格"因为变量不存在于processRequest()范围之外。
使用"使用严格"在文档的顶部将使这样的范围问题更容易看到=)
答案 2 :(得分:0)
首先,如果你想在JS之外的任何变量访问它,那么使用closures。我没有看到价格在哪里宣布,如果它是全球性的,那么你的情况就好了。
有两种类型的请求同步&异步(more here),并且应始终优先选择异步请求以获得出色的性能。在您的情况下,价格取决于请求的响应,您应该等到响应来。你可以通过两种方式来做到这一点