我想使用在函数内部到函数外部创建的变量值。但显示未定义。实际上我正在使用api获取IP地址,并想在功能之外使用该IP地址。内部功能正常,但外部未定义。这是我的代码
<script type="text/javascript">
var userip;
window.onload = function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://jsonip.com/?callback=DisplayIP";
document.getElementsByTagName("head")[0].appendChild(script);
};
function DisplayIP(response) {
document.getElementById("ipaddress").innerHTML = "Your IP Address is " + response.ip;
userip = response.ip;
alert(userip); // alerts ip address
}
alert(userip); // alerts undefined. it should alert ip address
</script>
答案 0 :(得分:1)
在您的代码中:
var userip = response.ip;
摆脱var
的困扰:
userip = response.ip;
当心,这使其成为全局范围。并且它将受到所有人的访问和修改。因此,请确保输入唯一的名称。
答案 1 :(得分:0)
您的代码将按照编写的顺序执行。您的脚本开始在加载页面上请求“ https://jsonip.com/?callback=DisplayIP”,但是您的最后一个“警报”将按照您的代码顺序执行,并且此时 “ userip”没有值。当您的请求完成时,将填充其值。因此,DisplayIP内部的“警报”有效,而最后一个无效。
<script type="text/javascript">
var userip;
window.onload = function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://jsonip.com/?callback=DisplayIP";
document.getElementsByTagName("head")[0].appendChild(script);
};
function DisplayIP(response) {
document.getElementById("ipaddress").innerHTML = "Your IP Address is " + response.ip;
userip = response.ip;
alert(userip);
}
alert(userip);
// Try this to understanding what I mean
setInterval(_ => alert(userip), 1000);
</script>