Javascript未声明变量

Javascript not declaring variables

本文关键字:变量 未声明 Javascript      更新时间:2023-11-08

我是JavaScript新手,我有这个脚本,我想在if上声明一个变量,但在document.write上,什么都不返回。我做错了什么?

<head>
    <script>
        (function () {
            setInterval(function () {
                var NetworkStatus = document.getElementById("status"),
                    isOnline = navigator.onLine;
                if (isOnline) {
                    NetworkStatus.innerHTML = "Online";
                    NetworkStatus.className = "online";
                    var person="John Doe";
                } else {
                    NetworkStatus.innerHTML = "Offline";
                    NetworkStatus.className = "offline";
                    var person="Santa Claus";
                }
            }, 100);
        })();
    </script>
</head>
<body>
    <h1 id="status"></h1>
    <script>
        document.write(person + "<br>");
    </script>
</body>

这完全是错误的,为什么要使用IIFE和超时,而您所要做的只是在DOM末尾的标记中添加脚本。

此外,您正在设置元素的innerHTML,并使用document.write,这将覆盖文档?

<head>
    <title>I messed up</title>
</head>
<body>
     <h1 id="status"></h1>
    <script>
        var NetworkStatus = document.getElementById("status"),
            isOnline = navigator.onLine;
            if (isOnline) {
                var person = "John Doe";
                NetworkStatus.innerHTML = "Online " + person;
                NetworkStatus.className = "online";
            } else {
                var person = "Santa Claus";
                NetworkStatus.innerHTML = "Offline " + person;
                NetworkStatus.className = "offline";
            }
    </script>
</body>

您在IIFE。它创建了自己的范围

这就是它停留的地方

这样做:

window.person="Santa Claus";

而不是你在做什么。

var将变量的作用域设置为在其中声明的函数。您正试图从该函数外部document.write它,因此它超出了作用域并且不可访问。

使用window.person而不是var person

函数在100ms后执行,这意味着页面加载时person变量没有值。