如何在javascript函数外传递值?

时间:2019-03-01 19:02:36

标签: javascript

我想使用在函数内部到函数外部创建的变量值。但显示未定义。实际上我正在使用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>

2 个答案:

答案 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>