从函数返回变量

时间:2018-03-28 00:48:30

标签: javascript json

我是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的语句(因为它是一个异步函数),但没有任何作用。

4 个答案:

答案 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.