Javascript(变量作用域):变量不会获得分配给它的值

问题描述 投票:0回答:2

我是JS的新手,我试图在函数中设置变量的值,但在设置值后它是'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 = '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来重新声明函数内部的局部变量,而且我使用'this'指向函数外部的IP变量,所以我不明白为什么它没有按预期工作?

javascript scope global-variables
2个回答
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
});

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);
© www.soinside.com 2019 - 2024. All rights reserved.