我是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变量在函数内部和外部具有相同的值,但事实并非如此。内部警报显示预期值,但函数外部的警报显示“无”。从类似的问题1,2,3,我没有使用var来重新声明函数内部的局部变量,而且我使用'this'指向函数外部的IP变量,所以我不明白为什么它没有按预期工作?
不需要使用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
});
如果您想在任何地方获取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);