我是JS的初学者,我很难理解为什么我的var的输出是“Undefined”。我的JS运行GET来下载一个JSON文件并使用一个函数,我正在尝试读取该文件并返回第一行:
invest.stock('APPLE', function (err, data) {
if (err) { console.log('ERROR', err); return; }
var APPLE_price = data.order[0]['price'];
console.log(APPLE_price); //until here works fine
});
console.log(APPLE_price); //output "Undefined" var
我之前尝试过声明var,我创建了一个等待var的语句(因为它是一个异步函数),但没有任何作用。
答案 0 :(得分:2)
首先在函数之外声明变量:
var APPLE_price;
invest.stock('APPLE', function (err, data) {
if (err) { console.log('ERROR', err); return; }
APPLE_price = data.order[0].price;
console.log(APPLE_price); //until here works fine
});
setTimeout(() => console.log(APPLE_price), 2000);
但使用回调或承诺会更优雅:
function getApplePrice() {
return new Promise((resolve, reject) => {
invest.stock('APPLE', function(err, data) {
if (err) {
reject(err);
return;
}
resolve(data.order[0].price);
});
});
}
getApplePrice().then(applePrice => {
console.log('applePrice is ' + applePrice);
})
答案 1 :(得分:1)
你的问题在这里是变量scoop它叫做本地独家新闻,你不能用
函数外的 var APPLE_price
你可以在这里找到javascript scoops JavaScript Scopes的参考资料 在这种情况下,您可以在函数
之外声明变量var Name = " john";
function myFunction() {
// code here can use Name
}
// code here can use Name
答案 2 :(得分:0)
这里的问题是范围。
由于APPLE_PRICE
的范围仅限于它所在的功能,因此无法在函数外部访问它。但最好阅读一些有关JavaScript中变量作用域的教程。
答案 3 :(得分:0)
var APPLE_price = data.order [0] ['price'];
这里,APPLE_price
是局部变量(功能级范围)。因为它是在一个函数中声明的。因此,只能在该函数内或函数内部的函数中访问。
如果你想在函数之外访问APPLE_price
,你需要在函数之外声明它。
var APPLE_price;
invest.stock('APPLE', function (err, data) {
if (err) { console.log('ERROR', err); return; }
APPLE_price = data.order[0]['price'];
console.log(APPLE_price); // value of data.order[0]['price']
});
console.log(APPLE_price); // value of APPLE_price under invest.stock function.