Javascript(变量范围):变量未获取分配给它的值

时间:2018-09-09 12:42:39

标签: javascript scope global-variables

我对JS非常陌生,我试图在函数中设置变量的值,但是在设置值后它是“未定义的”。我的代码如下:

    (function (name, context, definition){ 'use strict' ...} ('FP2', this, function (){...})
var fp = new FP2();   
fp.get(function(result, components) { for (var index in components){...};
    var IP = 'nothing';                                                               
    $.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
      this.IP = JSON.stringify(data, null, 2);
      alert(this.IP);
    });

    alert(IP);
});

我希望IP变量在函数内部和外部具有相同的值,但事实并非如此。内部警报显示期望值,但功能外部的警报显示“无”。 根据类似的问题123,我没有使用var在函数内部重新声明局部变量,而是使用'指向函数外部的IP变量。这样。”,所以我不明白为什么它不能按预期工作?

2 个答案:

答案 0 :(得分:1)

无需使用this.IP,当您在API调用中使用this时,是指该API调用函数本身。只需使用IP即可。

API调用之外的alert(IP);也不会返回结果。即使在API返回某些数据之前,也会立即调用此函数,因此它将打印出先前的值undefined

(function (name, context, definition){ 'use strict' ...} ('FP2', this, function (){...})
var fp = new FP2();   
fp.get(function(result, components) { for (var index in components){...};
    var IP = undefined;                                                               
    $.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
     IP = JSON.stringify(data, null, 2);
     alert(IP);
    });

    alert(IP); //This will return undefined
});

答案 1 :(得分:0)

如果要在任何地方获取IP值,请使用以下方法:

var IP = undefined;
var fpData = {};
function setIP(){
  var valueIP = undefined;
  $.ajax({
        url: "http://gd.geobytes.com/GetCityDetails?callback=?",
        async: false,
        dataType: 'json',
        success: function(data) {
            valueIP = JSON.stringify(data, null, 2); //console.log(valueIP);
            //return valueIP;
            localStorage.setItem('IP', valueIP);
        }
    });
  //return valueIP;
}

//call setIP
setIP();
IP = localStorage.getItem('IP');
console.log(IP);