13

我正在尝试学习 JavaScript,但是下面的代码给我带来了很多麻烦:

window.onload = function () {
    for ( var i = 0; i < seats.length; i++) {
        for ( var j = 0; j < seats.length; j++) {
            document.getElementById(getSeatId(i, j)).onclick = function(evt) {
                getSeatStatus(getSeatId(i, j));
            };
        }
    }
    document.getElementById("search").onclick = findSeat;
    document.getElementById("male_search").onclick = findMaleSeats;
    initSeats();
};

它来自外部 JS 文件,是唯一链接到页面的文件。findSeat, findMaleSeats, getSeatId, 和initSeats都在文件的稍后部分定义。当我双击此文件时,我收到以下错误:

Windows Script Host
Error: 'window' is not defined
Code: 800A1391

window.onload我已经尝试将代码移动到文件中的其他位置,为其他许多事情分配不同的函数(甚至是空函数) 。看来我的电脑不知道是什么window。如果我尝试在浏览器中打开 HTML,则不会加载任何内容(正如人们所期望的那样)。

有人知道这有什么问题吗?

4

3 回答 3

32

window 对象表示浏览器中打开的窗口。由于您不是在浏览器中运行代码,而是通过 Windows 脚本主机,解释器将无法找到窗口对象,因为它不存在,因为您不在 Web 浏览器中。

于 2013-01-04T20:36:49.040 回答
13

它来自外部 js 文件,是唯一链接到页面的文件。

好的。

当我双击此文件时,出现以下错误

听起来您正在双击/运行一个 .js 文件,该文件将尝试在浏览器之外运行脚本,就像命令行脚本一样。这可以解释这个错误:

Windows Script Host Error: 'window' is not defined Code: 800A1391

...不是您在浏览器中看到的错误。当然,浏览器是提供window对象的东西。

附录:作为一个行动方案,我建议打开相关的HTML 文件并查看控制台。如果您在那里看不到任何内容,则很可能您的window.onload定义只是在浏览器触发事件​​后被击中。window.onload

于 2013-01-04T20:39:28.207 回答
10

试图访问一个未定义的变量会给你一个ReferenceError.

一个解决方案是使用typeof

if (typeof window === "undefined") {
  console.log("Oops, `window` is not defined")
}

或尝试捕获:

try { window } catch (err) {
  console.log("Oops, `window` is not defined")
}

虽然typeof window可能是两者中最干净的,但 try catch 在某些情况下仍然有用。

于 2020-08-07T06:47:44.637 回答