全局时JSON变量未定义

时间:2017-07-20 19:52:29

标签: javascript jquery json variables global

我想制作一个变量" city "全局并在其他功能中使用它。我正在请求JSON数据,它似乎适用于此函数

var city;

function conditions(data) {
        var city = data.current_observation.display_location.full;
        var wcode = data.current_observation.icon;

        $('#city').append('<h2>' +'Weather forecast in ' + city + '</h2>');
        $('#city').addClass('headings-style');

    }

但是,当我尝试在其他功能中使用变量 city 时,我会收到未定义的数据:

function forecastDays(info) {
        var locationOne = info.forecast.simpleforecast.forecastday;
        locationOne.forEach(function (daysPlus) {

        var high = daysPlus.high.celsius;
        var low = daysPlus.low.celsius;
        var arr = ["day1", "day2", "day3", "day4"];
        jQuery.each(arr, function (i, val) {

            $("#temp_" + val).html('<p>' + city + 'High: ' + high + '&deg;C' + '<br>' + ' Low: ' + low + '&deg;C' + '</p>');

            });
        });

请帮助。

3 个答案:

答案 0 :(得分:4)

而不是做

var city = data.current_observation.display_location.full;

你应该做

city = data.current_observation.display_location.full;

以设置全局city变量的值。重新使用var关键字将在函数范围内声明一个新变量city,而不是全局。

答案 1 :(得分:1)

很少,很晚,但这是一个例子。 (@ J.Chen提供了答案)

当您使用var city =时,您正在重新定义函数范围内的变量,因此无法再从全局范围访问它。

在下面的示例中,city变量正在全局范围内正确使用,其中town变量正在函数范围中重新定义:

var city;
var town;

function foo() {
  city = "New York";
  var town = "Boston";
};

function bar() {
  console.log(city);
  console.log(town);
}

foo(); // assigns the variable a value
bar(); // console "New York" / undefined
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:-1)

city

中删除var funtion conditions