我对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 变量在函数内部和外部具有相同的值,但事实并非如此。内部警报显示预期值,但函数外部警报显示"无"。 从类似的问题 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);